dubbo服务暴露:
ServiceBean implements InitializingBean, ApplicationListener<ContextRefreshedEvent>
void afterPropertiesSet();
setApplication();
...
void onApplicationEvent(E event);
export();
doExport();
doExportUrl();
doExportUrlsFor1Protocol();
getInvoker();
Exporter<?> exporter = protocol.export();
registryProtocol.export();
dubboProtocol.export();
exporters.add(export);
protocol.export(originInvoker);
doLocalExport();
new InvokerDelegete<T>
dubboProtocol.export();
new DubboExporter()
openServer(url); 启动Netty服务器,监听端口号
ExchangeServer server = serverMap.get(getAddress());
createServer(url);
Exchangers.bind(url,requestHandler);
getExchanger(url).bind(url, handler);
Transporter.bind(url, handler)
ChannelHandler
getTransporter().bind(url, handler);
new NettyServer(url, handler);
ProviderConsumerRegTable.registerProvider(原始提供提供者, 注册中心url地址, 提供者的url地址);
dubbo服务暴露:
ServiceBean implements InitializingBean, ApplicationListener<ContextRefreshedEvent>
void afterPropertiesSet();
setApplication();
...
void onApplicationEvent(E event);
export();
doExport();
doExportUrl();
doExportUrlsFor1Protocol();
getInvoker();
Exporter<?> exporter = protocol.export();
registryProtocol.export();
dubboProtocol.export();
exporters.add(export);
protocol.export(originInvoker);
doLocalExport();
new InvokerDelegete<T>
dubboProtocol.export();
new DubboExporter()
openServer(url); 启动Netty服务器,监听端口号
ExchangeServer server = serverMap.get(getAddress());
createServer(url);
Exchangers.bind(url,requestHandler);
getExchanger(url).bind(url, handler);
Transporter.bind(url, handler)
ChannelHandler
getTransporter().bind(url, handler);
new NettyServer(url, handler);
ProviderConsumerRegTable.registerProvider(原始提供提供者, 注册中心url地址, 提供者的url地址);
dubbo服务调用:
InvokerInvocationHandler#invoker(Object proxy, Method method, Object[] args);
invoker.invoke(new RpcInvocation(method, args)).recreate();
MockClusterInvoker#invoke(Invocation invocation);
invoker.invoke(invocation)
AbstractClusterInvoker#invoke
list(invocation);
获取负载均衡机制
doInvoke(...)
FailoverClusterInvoker#doInvoke(...)
select(...)
invoker.invoke(invocation)
...
...
// dubbo协议
dubboInvoker#doInvoke(final Invocation invocation)
ExchangeClien currentClient;
currentClient. request(inv, timeout).get(); 客户端发请求
ReferenceCountExchangeClinet#request(Object request, int timeout);
client.request(request, timeout);
HeaderExchangeClient#request(Object request, int timeout);
channel.request(request, timeout);
HeaderExchangeChannel#request(Object request, int timeout);
channel.send(req);
超时报错,重试