zoukankan      html  css  js  c++  java
  • 第一章:(6)Dubbo 与 SpringBoot 整合

    一、服务提供者

      1、创建一个 boot-user-service-provider 的 SpringBoot 工程

      2、加入 gmall-interface 依赖

    <dependency>
        <groupId>com.njf.gmall</groupId>
        <artifactId>gmall-interface</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

        这里对接口进行了修改:

    public interface OrderService {
    
        /**
         * 初始化订单
         * @param userId
         */
        public List<UserAddress> initOrder(String userId);
    }
    
    
    public interface UserService {
        
        /**
         * 按照用户id返回所有的收货地址
         * @param userId
         * @return
         */
        public List<UserAddress> getUserAddressList(String userId);
    
    }

      3、提供 UserService 服务

    @Component
    public class UserServiceImpl implements UserService {
    
        @Override
        public List<UserAddress> getUserAddressList(String userId) {
            UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
            UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");
            return Arrays.asList(address1,address2);
        }
    }

    二、服务消费者

      1、创建一个 boot-order-service-consumer 的 SpringBoot 工程

      2、加入 gmall-interface 依赖

    <dependency>
        <groupId>com.njf.gmall</groupId>
        <artifactId>gmall-interface</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

      3、准备调用 UserService 进行消费

    三、SpringBoot 整合 Dubbo

      1、整合服务提供者

      (1)引入spring-boot-starter以及dubbo和curator的依赖

    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>

        注意starter版本适配:

        

      (2)在 application.properties 中配置提供者

    dubbo.application.name=boot-order-service-consumer
    dubbo.registry.protocol=zookeeper
    dubbo.registry.address=127.0.0.1:2181
    
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=20882
    
    dubbo.monitor.protocol=registry

        属性说明:

    application.name就是服务名,不能跟别的dubbo提供端重复
    registry.protocol 是指定注册中心协议
    registry.address 是注册中心的地址加端口号
    protocol.name 是分布式固定是dubbo,不要改。
    base-package  注解方式要扫描的包
    

      

      (3)使用 dubbo 中的 @Service 暴露服务

    @Component
    @Service
    public class UserServiceImpl implements UserService {
    
        @Override
        public List<UserAddress> getUserAddressList(String userId) {
            UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
            UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");
            return Arrays.asList(address1,address2);
        }
    }

      (4)开启基于注解的 Dubbo 功能

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

      2、整合服务消费者

      (1)引入spring-boot-starter以及dubbo和curator的依赖

    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>

      (2)在 application.properties 中配置消费者

    dubbo.application.name=boot-order-service-consumer
    dubbo.registry.protocol=zookeeper
    dubbo.registry.address=127.0.0.1:2181
    
    dubbo.monitor.protocol=registry

      (3)使用 dubbo 中的 @Reference 注解引用服务

    @Service
    public class OrderServiceImpl implements OrderService {
    
        @Reference
        UserService userService;
    
        @Override
        public List<UserAddress> initOrder(String userId) {
            System.out.println("用户ID:" + userId);
            //1.查询用户的收货地址
            List<UserAddress> userAddressList = userService.getUserAddressList(userId);
            System.out.println("userAddressList = " + userAddressList);
    
            userAddressList.forEach(t -> System.out.println(t.getUserAddress()));
            System.out.println("调用完成!");
            return userAddressList;
        }
    }

      (4)开启基于注解的 Dubbo 功能

    @EnableDubbo //开启基于注解的 dubbo 功能
    @SpringBootApplication
    public class BootOrderServiceConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(BootOrderServiceConsumerApplication.class, args);
        }
    
    }

      3、提供一个 Controller 进行测试

    @RestController
    public class OrderController {
    
        @Autowired
        OrderService orderService;
    
        @GetMapping(value = "/initOrder")
        public List<UserAddress> initOrder(@RequestParam("uid") String uid) {
            List<UserAddress> userAddresses = orderService.initOrder(uid);
            return userAddresses;
        }
    }

      4、测试

        

      5、dubbo 注解

      @Service、@Reference

      如果没有在配置中写dubbo.scan.base-package,还需要使用@EnableDubbo注解

  • 相关阅读:
    套接字socket
    Windows环境下教你用Eclipse ADT 插件生成.h/.so文件,Java下调用JNI,轻松学习JNI
    How to start/stop DB instance of Oracle under Linux
    Oracle SGA具体解释
    Oracle Study之--Oracle 单实例11.2.0.1.0升级到11.2.0.3.0
    MapReduce(十六): 写数据到HDFS的源代码分析
    Spring表达式语言SpEL简单介绍
    LinkCutTree详解
    洛谷P3379 【模板】最近公共祖先(LCA)(树链剖分)
    树链剖分详解
  • 原文地址:https://www.cnblogs.com/niujifei/p/15790475.html
Copyright © 2011-2022 走看看