zoukankan      html  css  js  c++  java
  • springboot使用dubbo和zookeeper

    2019-11-17 yls

    创建服务接口模块

    接口工程只提供接口,不提供实现,在后面的提供者和消费者中使用
    在使用接口的模块中只需要写具体实现类,避免了在每个模块中重复编写接口

    1. 在接口中引入依赖包

              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
                  <optional>true</optional>
              </dependency>
      
    2. 创建一个实体类,一定要实现Serializable接口,否则dubbo协议之间无法传输

      @Data
      @AllArgsConstructor
      public class User implements Serializable {
          private String name;
      }
      
    3. 创建接口

      
      public interface UserService {
          List<User> getAll();
          List<User> getAll2();
      }
      

    创建服务提供者

    1. 引入依赖

              <!--引入创建的接口服务-->
              <dependency>
                  <groupId>com.yls</groupId>
                  <artifactId>common-api</artifactId>
                  <version>1.0-SNAPSHOT</version>
              </dependency>
              <!--由于服务提供者不是web项目
              ,只需引入spring-boot-starter,不用引入spring-boot-starter-web-->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter</artifactId>
              </dependency>
              
              <!--dubbo-->
              <dependency>
                  <groupId>com.alibaba.boot</groupId>
                  <artifactId>dubbo-spring-boot-starter</artifactId>
                  <version>0.2.0</version>
              </dependency>
      
    2. 修改配置文件

      #服务名称
      dubbo.application.name=provider1
      #注册中心地址
      dubbo.registry.address=39.97.234.52:2181,39.97.234.52:2182,39.97.234.52:2183
      #注册中心类型
      dubbo.registry.protocol=zookeeper
      
      #版本号
      dubbo.application.version=3
      # Dubbo Protocol
      #协议名称
      dubbo.protocol.name=dubbo
      #服务暴露端口
      dubbo.protocol.port=20880
      
    3. 实现服务接口

      //暴露服务
      //这里的@Service是Dubbo提供的,不是spring中的
      //version必填
      @Service(version = "${dubbo.application.version}")
      @Component
      public class UserImpl implements UserService {
          @Override
          public List<User> getAll() {
              User user1 = new User("张三");
              User user2 = new User("lisi");
              List<User> list = Arrays.asList(user1, user2);
              return list;
          }
      }
      
    4. 启动服务

      //@EnableDubbo等价于在配置文件中配置dubbo.scan.base-packages
      //扫描实现类所在的包,注册Bean
      @EnableDubbo
      @SpringBootApplication
      public class ProviderApplication {
      
          public static void main(String[] args) {
      
              SpringApplication.run(ProviderApplication.class,args);
          }
      }
      

    创建消费者

    1. 引入依赖

      <!--消费者是web项目-->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
              
              <!--dubbo-->
              <dependency>
                  <groupId>com.alibaba.boot</groupId>
                  <artifactId>dubbo-spring-boot-starter</artifactId>
                  <version>0.2.0</version>
              </dependency>
      
              <!--引入创建的接口服务-->
              <dependency>
                  <groupId>com.yls</groupId>
                  <artifactId>common-api</artifactId>
                  <version>1.0-SNAPSHOT</version>
              </dependency>
      
    2. 修改配置文件

      #注册中心
      dubbo.registry.address=39.97.234.52:2181,39.97.234.52:2182,39.97.234.52:2183
      dubbo.registry.protocol=zookeeper
      #dubbo应用名称
      dubbo.application.name=consumer1
      
    3. 实现消费接口

      //服务消费者的Service是spring的
      @Service
      public class OrderImpl implements OrderService {
      
          //使用dubbo提供的@Reference访问远程服务
          //version对应服务提供者的version
          @Reference(version = "3")
          private UserService userService;
      
          @Override
          public List<User> init() {
              List<User> list = userService.getAll();
              list.forEach(item -> System.out.println(item.getName()));
              return list;
          }
      }
      
    4. 创建controller

      @Controller
      public class OrderController {
      
          @Autowired
          private OrderService orderService;
      
          @ResponseBody
          @RequestMapping("/init")
          public List<User> init() {
              return orderService.init();
          }
      }
      
      
    5. 启动服务消费者

      @EnableDubbo
      @SpringBootApplication
      public class ConsumerApplication {
          public static void main(String[] args) {
              SpringApplication.run(ConsumerApplication.class, args);
          }
      }
      

    dubbo相关补充

    1. dubbo使用本地缓存方式,如果注册中心全部宕机,dubbo也能正常工作,就算没有注册中心,dubbo也能通过dubbo直连通信

      //使用dubbo提供的@Reference访问远程服务
          //version对应服务提供者的version
          //url:如果没有注册中心,可以通过url配置服务提供者的dubbo协议端口,进行dubbo直连
          @Reference(version = "3",url ="127.0.0.1:20880" )
          private UserService userService;
      
  • 相关阅读:
    [Zjoi2014]力(FFT,卷积)
    LOJ 6240. 仙人掌
    Web 服务编程技巧和诀窍: 将 <xsd:any/> 元素用于自定义序列化(转)
    Ant工具使用说明(转)
    Web 服务编程技巧与窍门: 用 SAAJ 和 JAXRPC 构建 SOAP 响应信封(转)
    Axis2 quick start 中文版
    使用SOAP开发java web服务Axis开发方案(转)
    k 动画脚本很有算法 同时可以借鉴这里的画圆
    ui 界面美观化 (多维子材质脚本)
    系类函数介绍 之中可能没有一些预订变量 应用时要自己加上。
  • 原文地址:https://www.cnblogs.com/yloved/p/11881151.html
Copyright © 2011-2022 走看看