• spring-boot + dubbo + zookeeper


    1.前言

    博客上偶然看到 spring-boot + duboo 开发, 自己一直没有接触过分布式,手痒的做了一次搭建,记录下心得.

    2.zookeeper启动

    https://www.apache.org/dyn/closer.cgi/zookeeper/ 下载 zookeeper

    修改 conf  下的  zoo_sample.cfg 名称为  zoo.cfg 

    在bin目录下启动 zkServer.cmd 命令脚本.

    这样注册中心就搭建好了.

    3. dubbo 服务接口

       3.1 新建spring boot 项目 

      名称为 

        <groupId>com.example</groupId>
        <artifactId>spring-boot-demo-dubbo-interface</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>spring-boot-demo-dubbo-interface</name>

      pom文件 为

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
        </dependencies>

      3.2 新建 model 类 

    
    

    package com.dubbo.test.model;

    
    

    import java.io.Serializable;
    import java.util.Objects;

    
    

    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;


    @Entity
    public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private long id; private String userName; private String password; private int age; }

      建议使用 lombok

      3.3 建立服务接口

    package com.dubbo.test.service;
    
    import com.dubbo.test.model.User;
    
    public interface UserService {
    
        public void save(User user);
    
        public String sayHello(String word);
    }

      3.4 maven clean  + maven install 打包成 jar包

    (注意 :  需要删除 src/test/java 下的 默认生成的测试类, 否则会报错.  因为这个差点放弃搭建 )

    4. 导入 jar 包到maven 仓库

    虽然命令行也可以使用 , 不过我这里推荐使用eclipse导入jar包,图形化界面操控起来方便. 点击 install or deploy an artifact to a Maven repository

    直接导入即可.

    5. 搭建生产者

      5.1 pom 文件

      

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
               <!-- 加入springboot与dubbo集成的起步依赖 -->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>0.2.0</version>
            </dependency>
            
            <!-- 由于使用了zookeeper作为注册中心,则需要加入zookeeper的客户端jar包: -->
            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.10</version>
            </dependency>
            
             <!-- spring-data-jpa -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
    
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        
         <!-- 添加接口服务 -->
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>spring-boot-demo-dubbo-interface</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>

      5.2 application.properties 配置

      

    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/test_1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    spring.datasource.username=root
    spring.datasource.password=zhongyi2017!
    
    spring.jpa.properties.hibernate.hbm2ddl.auto=create
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
    spring.jpa.properties.hibernate.format_sql=true
    spring.jpa.show-sql=true
    
    # 访问端口
    server.port=8080
    # dubbo配置
    dubbo.application.name=springboot-dubbo-provider
    dubbo.registry.address=zookeeper://61.149.178.123:2181

      5.3  新建dao 层  

    package com.dubbo.test.dao;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    import com.dubbo.test.model.User;
    
    public interface UserRepository extends JpaRepository<User, Integer>{
    
    }

      5.4 新建 service 实现层

      

    package com.dubbo.test.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import com.alibaba.dubbo.config.annotation.Service;
    import com.dubbo.test.dao.UserRepository;
    import com.dubbo.test.model.User;
    
    @Service
    @Component
    public class UserServiceImpl implements UserService{
        @Autowired
        private UserRepository userRepository;
            
        @Override
        public void save(User user) {
            userRepository.save(user);
        }
    
        @Override
        public String sayHello(String word) {
            return word;
        }
    
    }

      @Service  使用的 dubbo提供的注解

      5.5 启动类中添加 @EnableDubbo

       

    package com.dubbo.test;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
    import com.dubbo.test.model.User;
    
    @SpringBootApplication
    @EnableDubbo
    public class SpringBootDemoDubboProviderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootDemoDubboProviderApplication.class, args);
        }
    
    }

      5.6 启动 

     6. 搭建消费者

      6.1 pom 文件  同 生产者一样

      6.2 application.properties 配置

      

    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/test_1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    spring.datasource.username=root
    spring.datasource.password=zhongyi2017!
    
    # WEBu670Du52A1u7AEFu53E3
    server.port=8081
    # dubbou914Du7F6E
    dubbo.application.name=springboot-dubbo-consumer
    dubbo.registry.address=zookeeper://61.149.178.123:2181 

      6.3 新建 controller 层

      

    package com.dubbo.test.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.alibaba.dubbo.config.annotation.Reference;
    import com.dubbo.test.model.User;
    import com.dubbo.test.service.UserService;
    
    @RestController
    public class UserController {
        @Reference // 该注解是dubbo提供的
        private UserService userService;
    
        @RequestMapping("/say")
        public String sayHello(String name) {
            return userService.sayHello(name);
        }
    
        @RequestMapping("/save")
        public void save() {
            User u = new User();
            u.setAge(20);
            u.setPassword("123");
            u.setUserName("zheng");
            userService.save(u);
        }
    }

      6.4 添加 @EnableDubbo 注解

      

    package com.dubbo.test;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
    
    @SpringBootApplication
    @EnableDubbo
    public class SpringBootDemoDubboConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootDemoDubboConsumerApplication.class, args);
        }
    
    }

      6.5 启动

    7. 测试

     

    8.总结

     就是一些工具,可能我把分布式想简单了吧,这只是自己写的demo,没有真正经历生产环境.

    希望自己能一直保持学习的态度学习下去.

  • 相关阅读:
    c++ 单步查看汇编代码【转】
    c++ 类内部函数调用虚函数
    grep和sed替换文件中的字符串【转】
    vim 正则替换【转】
    linux 文件编码问题
    shell截取字符串的一些简单方法
    chrome 安装页面编码选择插件
    namespace main
    【转】c++ 多线程
    使用git提交到github,每次都要输入用户名和密码的解决方法
  • 原文地址:https://www.cnblogs.com/lishuaiqi/p/10984992.html
Copyright © 2020-2023  润新知