配置Dubbo Consumer有3种方式:XML配置,API调用方式配置,注解方式配置。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <dubbo:application name="hello-world-app" /> <dubbo:registry address="multicast://224.5.6.7:1234" /> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:reference id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService" /> </beans>
支持的配置标签及对应的配置项详解,参考provider中的用法。
接下来重点讲解下<dubbo:reference/>的配置。
属性名 | 说明 |
---|---|
id | 服务引用id,作为java bean id,需要唯一 |
interface | 接口名,用于查找服务 |
version | 版本号,与服务提供者的版本一致 |
timeout | 服务方法调用超时时间(毫秒) |
retries | 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0 |
connections | 对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数 |
loadbalance | 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮询,最少活跃调用 |
async | 是否异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 |
generic | 泛化调用,可以绕过 |
check | 启动时检查提供者是否存在,true报错,false忽略 |
actives | 每服务消费者每服务每方法最大并发调用数 |
其他配置属性请参考xsd:http://dubbo.apache.org/schema/dubbo/dubbo.xsd
属性名 | 说明 |
---|---|
executes | 服务执行的请求上限 |
retries | 超时重试次数 |
timeout | 调用超时时间 |
loadbalance | 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮询,最少活跃调用 |
async | 是否异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 |
actives | 每服务消费者最大并发调用限制 |
其他属性,可以参考上面的xsd。
其中包含了consumer端和provider的配置,注意区分。
public class AnnotationConsumeService { @com.alibaba.dubbo.config.annotation.Reference public AnnotateService annotateService; // ... }
这种方式的配置和前面用xml配置的方式是一样的效果。
指定dubbo扫描路径的方式,可以参考前一章节中provider的实现。
import com.alibaba.dubbo.rpc.config.ApplicationConfig; import com.alibaba.dubbo.rpc.config.RegistryConfig; import com.alibaba.dubbo.rpc.config.ConsumerConfig; import com.alibaba.dubbo.rpc.config.ReferenceConfig; import com.xxx.XxxService; // 当前应用配置 ApplicationConfig application = new ApplicationConfig(); application.setName("yyy"); // 连接注册中心配置 RegistryConfig registry = new RegistryConfig(); registry.setAddress("10.20.130.230:9090"); registry.setUsername("aaa"); registry.setPassword("bbb"); // 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接 // 引用远程服务 ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏 reference.setApplication(application); reference.setRegistry(registry); // 多个注册中心可以用setRegistries() reference.setInterface(XxxService.class); reference.setVersion("1.0.0"); // 和本地bean一样使用xxxService XxxService xxxService = reference.get();
// 方法级配置 List<MethodConfig> methods = new ArrayList<MethodConfig>(); MethodConfig method = new MethodConfig(); method.setName("createXxx"); method.setTimeout(10000); method.setRetries(0); methods.add(method); // 引用远程服务 ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏 ... reference.setMethods(methods); // 设置方法级配置
上面章节更多从配置角度出发,接下来通过一个完整的例子,来讲解下dubbo consumer的完整使用。
这个例子中只有一个服务UserReadService,有一个方法 getUserById。 需要将通过Dubbo调用远程的服务。具体的步骤如下:
1.创建一个工程 如果本来已经有工程,可以忽略。创建一个spring boot工程,可以通过 https://start.spring.io/ 创建。
服务的提供方,已经在provider章节中进行了定义。 2.调用服务
@RestController public class UserTestController{ @Autowired private UserReadService userReadService; @RequestMapping("/user/getById") public String getUserById(Long id){ // just test return userReadService.getUserById(id).toString(); } }
3.Dubbo配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <dubbo:application name="hello-world-app" /> <dubbo:registry address="multicast://224.5.6.7:1234" /> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:reference id="userReadService" interface="com.package.UserReadService"check="false" /> </beans>
Dubbo配置的其他方式可以参考上一章节的相关配置,或者使用集成dubbo spring boot starter方式。