• 第二章:(7)Dubbo 配置与SpringBoot整合


    一、Dubbo 配置与 SpringBoot 整合 的三种方式

      1、方式一

        1)导入 dubbo-starter 依赖,在 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=20881
    
    dubbo.monitor.protocol=registry
    
    #dubbo.scan.base-packages=

        2)使用 @Service【暴露服务】,使用 @Reference【引用服务】

        暴露服务:

    @Component
    @Service  //dubbo注解,暴露服务
    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);
        }
    }

        引用服务:

    @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;
        }
    }

        3)使用 @EnableDubbo 开启基于注解的 Dubbo 功能或者使用 dubbo.scan.base-packages 指定要扫描的包

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

      2、方式二:保留 dubbo  xml 配置文件

        1)导入 dubbo-starter 依赖,使用 @ImportResource 导入类路径下的 配置文件

        保留之前的配置文件

        

        2)@ImportResource(locations = "classpath:provider.xml") 导入配置文件

    @ImportResource(locations = "classpath:provider.xml")
    @SpringBootApplication
    public class BootUserServiceProviderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(BootUserServiceProviderApplication.class, args);
        }
    
    }

      3、方式三:使用注解 API 方式

        1)将每一个组件手动创建到容器中

    @Configuration
    public class MyDubboConfig {
    
        @Bean
        public ApplicationConfig applicationConfig() {
            // 当前应用配置
            ApplicationConfig application = new ApplicationConfig();
            application.setName("boot-user-provider");
    
            return application;
        }
    
        //<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
        @Bean
        public RegistryConfig registryConfig() {
            RegistryConfig registryConfig = new RegistryConfig();
            registryConfig.setProtocol("zookeeper");
            registryConfig.setAddress("127.0.0.1:2181");
    
            return registryConfig;
        }
    
        //<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
        @Bean
        public ProtocolConfig protocolConfig() {
            ProtocolConfig protocolConfig = new ProtocolConfig();
            protocolConfig.setName("dubbo");
            protocolConfig.setPort(20882);
    
            return protocolConfig;
        }
    
    
        //<dubbo:service interface="com.njf.gmall.service.UserService" ref="userServiceImpl01" timeout="1000" version="1.0.0"/>
        //<!--<dubbo:method name="getUserAddressList" timeout="1000" retries="3"></dubbo:method>-->
        @Bean
        public ServiceConfig<UserService> userServiceConfig(UserService userService) {
            ServiceConfig<UserService> serviceConfig = new ServiceConfig<>();
    
            serviceConfig.setInterface(UserService.class);
            serviceConfig.setRef(userService);
            serviceConfig.setTimeout(1000);
            serviceConfig.setVersion("1.0.1");
    
            //在 service 中配置 method 的信息
            MethodConfig methodConfig = new MethodConfig();
            methodConfig.setName("getUserAddressList");
            methodConfig.setTimeout(1000);
    
            //将 method 的设置关联到 service 配置中
            serviceConfig.setMethods(Arrays.asList(methodConfig));
    
            return serviceConfig;
        }
    
    }

        2)让dubbo 来扫描其他配置的组件

    @DubboComponentScan(basePackages = {"com.njf.gmall"})  //扫描dubbo配置组件所在包
    @EnableDubbo  //开启基于注解的 dubbo 功能
    @SpringBootApplication
    public class BootUserServiceProviderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(BootUserServiceProviderApplication.class, args);
        }
    
    }

      更多API设置参考官网:

        手册:https://dubbo.apache.org/zh/docs/references/api/

       API配置:https://dubbo.apache.org/zh/docs/references/configuration/api/

     
  • 相关阅读:
    (转)django上传文件
    django中的认证与登录
    django中的转义
    django中的request对象详解
    dotnetspider
    区块链试验
    管理员权限
    axure跨inframe传递参数
    python selenium chrome 测试
    python chrome selenium
  • 原文地址:https://www.cnblogs.com/niujifei/p/15803360.html
Copyright © 2020-2023  润新知