分布式服务框架Dubbo总结-0x02 dubbo常用配置

常用功能配置


线程池

<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 属性,版本号必须一致,才能调用

完整Demo点我

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • 0 准备 安装注册中心:Zookeeper、Dubbox自带的dubbo-registry-simple;安装Du...
    七寸知架构阅读 14,027评论 0 88
  • RandomAccessFile 相关API的使用 writeInt()方法源码,每次写入一位 IO流(输入流,...
    icecrea阅读 700评论 0 1
  • 这个2016年遇见了非常多的非常棒的人,像我可爱的大六子吾狗老锦鲤一言不合就揉乱她头发的小炉子等等等等性格非常好的...
    都赖洛桑阅读 193评论 0 0
  • 1 第一次听说“仪式感”这个词是在《小王子》这本书里。 狐狸说:“你每天最好在相同的时间来,比如说你定在下午四点来...
    小美的鹅会下蛋阅读 934评论 0 2