常用功能配置
线程池
<dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" /><!--指定了线程池和最大线程数,拦截对象是所有-->
并发控制
服务提供端
<!-- 声明需要暴露的服务接口 -->
<!--executes=10 服务器端并发执行(或占用线程池线程数)不能超过10个-->
<!--actives="10" 每客户端并发执行(或占用连接的请求数)不能超过10个-->
<dubbo:service interface="com.m1.dubboFunction.api.IProviderAPI" ref="providerImpl" executes="10" actives="10">
<!-- <dubbo:method name="dosomething" actives="10"/>--> <!--dosomething方法每客户端并发执行(或占用连接的请求数)不能超过10个-->
</dubbo:service>
服务消费端
<!--actives="10" 每客户端并发执行(或占用连接的请求数)不能超过10个-->
<dubbo:reference id="providerImpl" check="false" timeout="25000" retries="0" actives="10"
interface="com.m1.dubboFunction.api.IProviderAPI">
<!-- <dubbo:method name="dosomething" actives="10"/> --><!--dosomething方法每客户端并发执行(或占用连接的请求数)不能超过10个-->
</dubbo:reference>
如果<dubbo:service>和<dubbo:reference>都配了actives,<dubbo:reference>优先
负载均衡策略
配置loadbalance属性为leastactive,[更多配置](http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1)
<!--actives="10" 每客户端并发执行(或占用连接的请求数)不能超过10个-->
<!--loadbalance="leastactive" 此Loadbalance会调用并发数最小的Provider(Consumer端并发数)-->
<dubbo:reference id="providerImpl" check="false" timeout="25000" retries="0" actives="10" loadbalance="leastactive"
interface="com.m1.dubboFunction.api.IProviderAPI">
<!-- <dubbo:method name="dosomething" actives="10"/> --><!--dosomething方法每客户端并发执行(或占用连接的请求数)不能超过10个-->
</dubbo:reference>
令牌验证
暂未用到
然而并没有什么卵用,上面的有些东西,都是可以用注解一行搞掂
注解
主要注解有两个:
- com.alibaba.dubbo.config.annotation.Service
- com.alibaba.dubbo.config.annotation.Reference
消费端
consumer.xml配置
dubbo:annotation 是自动扫描包,与spring的雷同
<dubbo:application name="dubbo-test-consumer"/>
<dubbo:registry address="zookeeper://x.x.x.x:2181" />
<dubbo:protocol name="dubbo" port="21101" />
<dubbo:annotation package="com.m1.dubboFunction.consumer" />
consumer.java
@Service
public class Consumer {
private Long count = 0L;
// @Autowired
@Reference(version = "1.0.0", actives = 10, loadbalance = "leastactive")//直接采用注解
private IProviderAPI providerAPI;
// @Scheduled(cron = "0-59 * * * * ?")//定时
@Scheduled(fixedDelay = 1000 * 5, initialDelay = 1000)//心跳更新,5000毫秒执行一次,延迟1秒后才执行
public void doSomething() {
System.out.println(providerAPI.dosomething("now is " + count, count++));
}
}
提供端
provider.xml配置 除扫描包路径和协议端口不同外,其余一致
ProviderImpl .java
@Service("providerImpl")
@com.alibaba.dubbo.config.annotation.Service(executes=10,version = "1.0.0",actives = 10,loadbalance="leastactive")
public class ProviderImpl implements IProviderAPI {
public String dosomething(String json, long logId) {
System.out.println(json);
return "i finish doing "+json +" where logid=="+logId;
}
}
Tip1:虽然注解里面也有registry,application,protocol,但完全不会用...官方文档里面也没有提及
Tip2:如果启用了version 属性,版本号必须一致,才能调用
网友评论