返回

dubbo 框架小结

发布时间:2023-11-22 18:13:42 234

1. dubbo:protocol

Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

  serialization=“hessian2” charset=“UTF-8” threadpool=“fixed” threads=“100” queues=“0” iothreads=“9” buffer=“8192” accepts=“1000” payload=“8388608” />

 

1.1 payload:默认,provider 和 consumer 传递消息的大小不超过 8M,检查 payload 的调用栈如下:

 

1.2 线程池相关

threadpool:可选(fixed/cached)

threads:实质是 corePoolSize 和 maximumPoolSize

queues:线程池队列大小

 

1.3

 

2. dubbo:reference

2.1 与人联调时,采用直连方式连接对方主机,会很方便。

url:dubbo provider 地址

    group="a" merger="true" check="true" retries="0"
url="dubbo://127.0.0.1:20880"/>

 比较下直连和 zk 作为注册中心的区别,

直连:

连接 zk 注册中心:

2.2 负载均衡

loadbanlance:random(默认),roundrobin,consistenthash,leastactive

2.3 失败方案

cluster:常用的有 failover,failfast。failover 失败重试,failfast 只发起一次调用,失败就报错。

mock 是 cluster 的 wrapper:

 

2.4 check 属性

正常情况下,一个进程既是 consumer,又是 provider,也许它启动时,对应的 provider 还没有,通过设置 check="false",该进程可以正常启动,但是不能调用远程服务。

只有在调用 appCtx.getBean 时,才会触发 consumer 的 reference,如果在标签中设置 check="false",即使没有 provider,consumer 也能 ref 成功,appCtx.getBean 正常返回。而如果设置 check="true",则会抛出异常。

那么,check 所起的作用到底是啥?判断网络是否连接,以及是否可写。

// boolean com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker.isAvailable()
public boolean isAvailable() {
if (!super.isAvailable())
return false;
for (ExchangeClient client : clients){
if (client.isConnected() && !client.hasAttribute(Constants.CHANNEL_ATTRIBUTE_READONLY_KEY)){
//cannot write == not Available ?
return true ;
}
}
return false;
}

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
java 中多播、广播编程 2023-11-22 14:57:07