dubbo消费者调用多个服务_Dubbo消费者调用提供者

本文详细介绍了Dubbo消费者如何构造Invoker并调用服务,包括动态生成Invoker、ReferenceConfig的createProxy方法、Invoker的invoke过程,以及DubboProtocol如何开启服务监听。消费者通过Invoker的doInvoke方法进行网络通信,根据异步或同步方式进行处理。同时,提供者通过RegistryProtocol的export方法进行服务注册,并在DubboProtocol中开启监听。当接收到请求时,通过回调对象调用Invoker的invoke方法完成服务响应。
摘要由CSDN通过智能技术生成

一、消费者构造Invoker

消费者动态的构造Invoker是通过监听器,在注册中心服务变化后通过Directory调用DubboProtocol的refer方法来构造Invoker

@Override

public Invoker refer(Class serviceType, URL url) throws RpcException {

optimizeSerialization(url);

// create rpc invoker.

DubboInvoker invoker = new DubboInvoker(serviceType, url, getClients(url), invokers);

invokers.add(invoker);

return invoker;

}

在ReferenceConfig中通过inoker去生成代理类返回,在执行调用的时候去调用Invoker的invoker方法。

下面代码是ReferenConfig的createProxy方法的最后一步。

if (urls.size() == 1) {

invoker = refprotocol.refer(interfaceClass, urls.get(0));

} else {

List> invokers = new ArrayList>();

URL registryURL = null;

for (URL url : urls) {

invokers.add(refprotocol.refer(interfaceClass, url));

if (Constants.REGISTRY_PROTOCOL.equals(url.getProtocol())) {

registryURL = url; // use last registry url

}

}

if (registryURL != null) { // registry url is available

// use AvailableCluster only when register's cluster is available

URL u = registryURL.addParameter(Constants.CLUSTER_KEY, AvailableCluster.NAME);

invoker = cluster.join(new StaticDirectory(u, invokers));

} else { // not a registry url

invoker = cluster.join(new StaticDirectory(invokers));

}

}

}

Boolean c = check;

if (c == null && consumer != null) {

c = consumer.isCheck();

}

if (c == null) {

c = true; // default true

}

if (c && !invoker.isAvailable()) {

// make it possible for consumer to retry later if provider is temporarily unavailable

initialized = false;

throw new IllegalStateException("Failed to check the status of

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值