第二章:(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 导入类路径下的 配置文件

    保留之前的配置文件

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

 

    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/

 

 

 

 
上一篇:win10+kafka+springboot+dubbo


下一篇:聊聊dubbo协议