sofa-rpc-node
sofa-rpc-node copied to clipboard
feat: 增加balancerFilter优先匹配
https://github.com/sofastack/sofa-rpc-node/issues/96
在使用registry的情况下,如果有较多的地址,在这里希望能够进行部分地址增加优先级优先掉用
我的需求: 如地址1、2、3 、4、5、6。希望能够先掉用 1、2、3,并且兜底不可用情况,重新走之前的逻辑 随机掉用1-6
所以在此增加一个balancerFilter
,在_loadbalancer.select
之前先掉用一次,筛选出需要优先掉用的地址,优先连接一次。不可用时使用原逻辑。
例子
const { RpcClient } = require('sofa-rpc-node').client;
const { ZookeeperRegistry } = require('sofa-rpc-node').registry;
const logger = console;
// 1. 创建 zk 注册中心客户端
const registry = new ZookeeperRegistry({
logger,
address: '127.0.0.1:2181',
});
async function invoke() {
// 2. 创建 RPC Client 实例
const client = new RpcClient({
logger,
registry,
});
// 3. 创建服务的 consumer
const consumer = client.createConsumer({
interfaceName: 'com.nodejs.test.TestService',
balancerFilter: addressList => {
// 可以重写addressList,进行filter可以实现优先级功能
// 如: 优先匹配`host === '127.0.0.1:13202'`的地址
return addressList.filter(v => v.host === '127.0.0.1:13202');
},
});
// 4. 等待 consumer ready(从注册中心订阅服务列表...)
await consumer.ready();
// 5. 执行泛化调用
const result = await consumer.invoke('plus', [ 1, 2 ], { responseTimeout: 3000 });
console.log('1 + 2 = ' + result);
}
invoke().catch(console.error);
@fengmk2 麻烦帮忙看一下啦,谢谢
Codecov Report
Merging #97 (55d857d) into master (1921e7d) will increase coverage by
0.02%
. The diff coverage is100.00%
.
@@ Coverage Diff @@
## master #97 +/- ##
==========================================
+ Coverage 98.31% 98.33% +0.02%
==========================================
Files 38 38
Lines 2311 2344 +33
Branches 367 378 +11
==========================================
+ Hits 2272 2305 +33
Misses 39 39
Impacted Files | Coverage Δ | |
---|---|---|
lib/client/address_group.js | 99.13% <100.00%> (+0.03%) |
:arrow_up: |
lib/client/loadbalancer/base.js | 97.80% <100.00%> (+0.24%) |
:arrow_up: |
lib/client/loadbalancer/weight_rr.js | 100.00% <100.00%> (ø) |
Continue to review full report at Codecov.
Legend - Click here to learn more
Δ = absolute <relative> (impact)
,ø = not affected
,? = missing data
Powered by Codecov. Last update 1921e7d...55d857d. Read the comment docs.
@fengmk2 老哥这个还有合进去的可能么
@fengmk2 老哥这个还有合进去的可能么
如果可以的话,或者简单点这样,https://github.com/sofastack/sofa-rpc-node/pull/100 把createLoadBalancer增加到参数里。把createLoadBalancer透出也方便去定制功能
const defaultOptions = {
loadbalancerClass: 'roundRobin',
retryFaultInterval: 30000, // 30s 重新尝试连接下不可用的地址
waitConnect: true,
createLoadBalancer,
};
class AddressGroup extends Base {
constructor(options = {}) {
...
this._loadbalancer = options.createLoadBalancer(this);