為啥會有這需求呢霞揉?是因為有一個功能旬薯,在管理頁面添加修改的時候需要調(diào)用多節(jié)點部署的某服務(wù)的一個rpc接口。
那怎么做到這種蛋疼操作呢适秩?
第一步:
實現(xiàn)com.alibaba.dubbo.rpc.cluster.LoadBalance
操作一波傳入的invokers(這就是所有的服務(wù)列表)
我這里是從第二個節(jié)點開始調(diào)用一次绊序,然后結(jié)尾返回第一個元素(返回的這個元素也會被調(diào)用)
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.cluster.LoadBalance;
import java.util.List;
/**
* 所有節(jié)點都調(diào)用一次的負(fù)載均衡策略
*
* @author 周廣
**/
public class AllExecLoadBalance implements LoadBalance {
@Override
public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException {
if (invokers.size() > 1) {
for (int i = 1; i < invokers.size(); i++) {
invokers.get(i).invoke(invocation);
}
}
return invokers.get(0);
}
}
第二步:
在resources下添加文件夾META-INF硕舆,然后再添加文件夾dubbo然后添加文件:com.alibaba.dubbo.rpc.cluster.LoadBalance
添加內(nèi)容:allExecLoadBalance=com.xxx.xxx.AllExecLoadBalance
等號前面是key一般是用駝峰類名(一會用得上) 等號后面 我們自定義的復(fù)雜均衡類的全路徑
第三步:
在需要使用這神奇操作的類上面加上一個屬性
就這樣就搞定咯~ 可以開2個節(jié)點嘗試一下~
如果只有一個節(jié)點 是不會觸發(fā)負(fù)載均衡策略的,在外層dubbo代碼就直接選擇返回了骤公。 debug就進(jìn)不去AllExecLoadBalance