# dubbo-boot-study **Repository Path**: hhgs_admin/dubbo-boot-study ## Basic Information - **Project Name**: dubbo-boot-study - **Description**: SpringBoot+Dubbo示例 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-31 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: Dubbo ## README 参考网址:https://github.com/apache/dubbo-spring-boot-project 版本: | Dubbo | SpringBoot | | :---: | :--------: | | 2.7.8 | 2.5.6 | POM配置示例 ```xml UTF-8 UTF-8 1.8 2.7.8 2.12.0 org.springframework spring-context-support org.apache.dubbo dubbo-spring-boot-starter 2.7.8 org.apache.curator curator-framework ${zookeeper.version} org.apache.curator curator-recipes ${zookeeper.version} ``` SpringBoot与Dubbo整合的三种方式 1,导入dubbo-starter,在application.properties中配置属性,使用@Service暴露服务,使用@Reference引用 服务提供者application.properties文件 ```properties dubbo.application.name=user-service-provider dubbo.registry.address=127.0.0.1:2181 dubbo.registry.protocol=zookeeper dubbo.protocol.name=dubbo dubbo.protocol.port=20881 dubbo.monitor.protocol=registry ``` ```properties #服务提供者启动类增加 @EnableDubbo(scanBasePackages = "com.yonghui.userprovider.service") #服务提供者service实现类增加 @DubboService(interfaceClass = UserService.class) @Component ``` 2,保留dubbo的xml配置文件 导入dubbo-starter,使用@ImportResource导入dubbo配置文件即可 服务提供者增加xml ```xml ``` ```java 服务提供者启动类注解 @ImportResource(locations = "provider.xml") 服务提供者实现类注解,只保留 @Component ``` 3,使用注解API配置类,参考地址:https://dubbo.apache.org/zh/docs/v2.7/user/configuration/annotation/ 注释掉之服务提供方前所有xml和properties配置, ```java 服务提供者启动类注解 @ImportResource(locations = "provider.xml") 服务提供者实现类注解,只保留 @Component ``` 服务提供方新增注解类 ```java package com.yonghui.userprovider.config; import com.alibaba.dubbo.config.*; import com.yonghui.userapi.service.UserService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.ArrayList; import java.util.List; @Configuration public class MyDubboConfig { @Bean public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName("boot-user-service-provider"); return applicationConfig; } // @Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setProtocol("zookeeper"); registryConfig.setAddress("127.0.0.1:2181"); return registryConfig; } // @Bean public ProtocolConfig protocolConfig() { ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName("dubbo"); protocolConfig.setPort(20882); return protocolConfig; } /** * */ @Bean public ServiceConfig userServiceConfig(UserService userService){ ServiceConfig serviceConfig = new ServiceConfig<>(); serviceConfig.setInterface(UserService.class); serviceConfig.setRef(userService); serviceConfig.setVersion("1.0.0"); //配置每一个method的信息 MethodConfig methodConfig = new MethodConfig(); methodConfig.setName("getUserAddressList"); methodConfig.setTimeout(1000); //将method的设置关联到service配置中 List methods = new ArrayList<>(); methods.add(methodConfig); serviceConfig.setMethods(methods); //ProviderConfig //MonitorConfig return serviceConfig; } } ``` 绕过注册中心直连 在服务消费者的实现类修改注解 ```java package com.yonghui.userconsumer.service.impl; import com.yonghui.userapi.bean.UserAddress; import com.yonghui.userapi.service.OrderService; import com.yonghui.userapi.service.UserService; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; /** * 1、将服务提供者注册到注册中心(暴露服务) * 1)、导入dubbo依赖(2.6.2)\操作zookeeper的客户端(curator) * 2)、配置服务提供者 *

* 2、让服务消费者去注册中心订阅服务提供者的服务地址 * */ @Service public class OrderServiceImpl implements OrderService { @DubboReference(url="127.0.0.1:20881") UserService userService; @Override public List initOrder(String userId) { // TODO Auto-generated method stub System.out.println("用户id:" + userId); //1、查询用户的收货地址 List addressList = userService.getUserAddressList(userId); return addressList; } public List hello(String userId) { // TODO Auto-generated method stub return Arrays.asList(new UserAddress(10, "测试地址", "1", "测试", "测试", "Y")); } } ```