Dubbo源码(九) - 服务调用过程

王柳  金牌会员 | 2022-9-16 17:22:26 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 793|帖子 793|积分 2379

1. 前言

本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo
源码分析均基于官方Demo,路径:dubbo/dubbo-demo
如果没有看过之前Dubbo系列的文章,建议先去看看。因为服务调用过程涉及范围较广,需要那些前置知识。
Dubbo 服务调用过程比较复杂,包含众多步骤,比如发送请求、编解码、服务降级、过滤器链处理、序列化、线程派发以及响应请求等步骤。限于篇幅原因,本篇文章无法对所有的步骤一一进行分析。后续挖坑再说吧。本篇文章将会重点分析请求的发送与接收、线程派发以及响应的发送与接收等过程。
2. 源码分析

先了解下 Dubbo 服务调用过程(图片来自官方文档)

首先服务消费者通过代理对象 Proxy 发起远程调用,接着通过网络客户端 Client 将编码后的请求发送给服务提供方的网络层上,也就是 Server。Server 在收到请求后,首先要做的事情是对数据包进行解码。然后将解码后的请求发送至分发器 Dispatcher,再由分发器将请求派发到指定的线程池上,最后由线程池调用具体的服务。这就是一个远程调用请求的发送与接收过程。至于响应的发送与接收过程,这张图中没有表现出来。
2.1 服务调用方式

Dubbo 支持同步和异步两种调用方式,其中异步调用还可细分为“有返回值”的异步调用和“无返回值”的异步调用。所谓“无返回值”异步调用是指服务消费方只管调用,但不关心调用结果,此时 Dubbo 会直接返回一个空的 RpcResult。Dubbo 默认使用同步调用方式。
2.1.1 异步调用案例

当有返回值异步和无返回值异步同时存在,无返回值异步优先:

  • 有返回值异步调用
    修改配置,将参数async设置为 true
    1. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
    2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
    3.     <dubbo:method name="sayHello" return="false" />
    4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
    5. </dubbo:reference>
    复制代码
    代码使用如下
    1. String hello = demoService.sayHello("world");// 返回值为null,要注意
    2. Future<String> future = RpcContext.getContext().getFuture();
    3. ... // 业务线程可以开始做其他事情
    4. result = future.get();
    复制代码
  • 无返回值异步调用
    修改配置,将参数return设置为 false
    1. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
    2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
    3.     <dubbo:method name="sayHello" return="false" />
    4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
    5. </dubbo:reference>
    复制代码
    代码使用
    1. String hello = demoService.sayHello("world");// 返回值为null,要注意
    2. Future<String> future = RpcContext.getContext().getFuture();// future 为 null
    复制代码
下面,我们开始进入源码分析。
2.1.2 InvokerInvocationHandler

当我们通过Spring注入服务接口时,实际上注入的是服务接口的实现类,这个实现类由Dubbo框架生成。请看 服务引用#创建代理对象
  1. package org.apache.dubbo.common.bytecode;public class proxy0 implements org.apache.dubbo.demo.DemoService {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>public static java.lang.reflect.Method[] methods;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>private java.lang.reflect.InvocationHandler handler;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference>public proxy0() {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>public proxy0(java.lang.reflect.InvocationHandler arg0) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>handler = 1;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>public java.lang.String sayHello(java.lang.String arg0) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference>Object[] args = new Object[1];<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference>args[0] = (w) $1;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>Object ret = handler.invoke(this, methods[0], args);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference>return (java.lang.String) ret;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference>}}
复制代码
也就是调用 demoService.sayHello 时,实际上是调用 handler.invoke ,而这个 handler 就是InvokerInvocationHandler
  1. public class InvokerInvocationHandler implements InvocationHandler {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>private final Invoker invoker;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>public InvokerInvocationHandler(Invoker handler) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>this.invoker = handler;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>String methodName = method.getName();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference>Class[] parameterTypes = method.getParameterTypes();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference>// 拦截定义在 Object 类中的方法(未被子类重写),比如 wait/notify<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>if (method.getDeclaringClass() == Object.class) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference>return method.invoke(invoker, args);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference>// 如果 toString、hashCode 和 equals 等方法被子类重写了,这里也直接调用<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>if ("toString".equals(methodName) && parameterTypes.length == 0) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference>return invoker.toString();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference>if ("hashCode".equals(methodName) && parameterTypes.length == 0) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference>return invoker.hashCode();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference>if ("equals".equals(methodName) && parameterTypes.length == 1) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference>return invoker.equals(args[0]);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference>// 将 method 和 args 封装到 RpcInvocation 中,并执行后续的调用<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference>return invoker.invoke(new RpcInvocation(method, args)).recreate();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference>}}
复制代码
invoke 方法判断如果是 java 内置的一下方法,则直接调用,不走 dubbo 的逻辑。所以我们关注的是 invoker.invoke() 。类变量 invoker 实际上是 FailoverClusterInvoker, 但是又被 MockClusterInvoker包装了一层。这个 FailoverClusterInvoker 是由FailoverCluster生成的,请看 服务引用#远程引用 。而 MockClusterInvoker 是由MockClusterWrapper生成,其基于Dubbo的SPI机制,将 FailoverCluster 又包装了一遍。MockClusterInvoker内部封装了服务降级逻辑。以后再开坑聊。
我们在 Dubbo集群 文章中讲过FailoverClusterInvoker,所以直接快进到DubboInvoker#doInvoke()方法。此时是不是一脸懵逼,为啥从 FailoverClusterInvoker 一下子就到了 DubboInvoker ,我们先来看看调用栈

我们把视角拉回FailoverClusterInvoker#doInvoke,看看通过负载均衡选出的 invoker

从图片可以看到,最外层的invoker是一个内部类,是 服务目录通过订阅注册中心 生成的
  1. invoker = new InvokerDelegate<T>(protocol.refer(serviceType, url), url, providerUrl);
复制代码
而 protocol 实际是DubboProtocol,所以 protocol.refer(serviceType, url) 生成的是DubboInvoker,至于为啥调用链这么长,是因为ProtocolFilterWrapper,这个类增加了对Dubbo过滤器的支持。这是一个 protocol 的包装类,它包装了DubboProtocol#refer() ,我们取看看 ProtocolFilterWrapper的源码
  1. @Overridepublic  Invoker refer(Class type, URL url) throws RpcException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>if (Constants.REGISTRY_PROTOCOL.equals(url.getProtocol())) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference>return protocol.refer(type, url);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>// 创建invoker链条<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>return buildInvokerChain(protocol.refer(type, url), Constants.REFERENCE_FILTER_KEY, Constants.CONSUMER);}private static  Invoker buildInvokerChain(final Invoker invoker, String key, String group) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>Invoker last = invoker;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference>// 获取过滤器<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>List filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference>if (!filters.isEmpty()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference>for (int i = filters.size() - 1; i >= 0; i--) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>final Filter filter = filters.get(i);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference>final Invoker next = last;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference>// 对invoker进行封装,责任链模式<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>last = new Invoker() {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference>......<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference>public Result invoke(Invocation invocation) throws RpcException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference>return filter.invoke(next, invocation);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference>};<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference>return last;}
复制代码
buildInvokerChain 方法将 invoker 转换成责任链的形式,获取的 filters 为 {ConsumerContextFilter,FutureFilter,MonitorFilter},和图片中的调用栈就对应上了。
那么还剩下ListenerInvokerWrapper,这是一个 Invoker 包装类,由 ProtocolListenerWrapper 生成。
  1. public class ProtocolListenerWrapper implements Protocol {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>public  Invoker refer(Class type, URL url) throws RpcException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>if (Constants.REGISTRY_PROTOCOL.equals(url.getProtocol())) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>return protocol.refer(type, url);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference>// 封装了Invoker监听器<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference>return new ListenerInvokerWrapper(protocol.refer(type, url),<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference>Collections.unmodifiableList(<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference>ExtensionLoader.getExtensionLoader(InvokerListener.class)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference>.getActivateExtension(url, Constants.INVOKER_LISTENER_KEY)));<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference>}}public class ListenerInvokerWrapper implements Invoker {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference>public ListenerInvokerWrapper(Invoker invoker, List listeners) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference>if (invoker == null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference>throw new IllegalArgumentException("invoker == null");<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference>this.invoker = invoker;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference>this.listeners = listeners;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference>if (listeners != null && !listeners.isEmpty()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference>for (InvokerListener listener : listeners) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference>if (listener != null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  218. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  219.     <dubbo:method name="sayHello" return="false" />
  220. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  221. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  222. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  223.     <dubbo:method name="sayHello" return="false" />
  224. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  225. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  226. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  227.     <dubbo:method name="sayHello" return="false" />
  228. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  229. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  230. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  231.     <dubbo:method name="sayHello" return="false" />
  232. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  233. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  234. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  235.     <dubbo:method name="sayHello" return="false" />
  236. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  237. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  238. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  239.     <dubbo:method name="sayHello" return="false" />
  240. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  241. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  242. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  243.     <dubbo:method name="sayHello" return="false" />
  244. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  245. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  246. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  247.     <dubbo:method name="sayHello" return="false" />
  248. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  249. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  250. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  251.     <dubbo:method name="sayHello" return="false" />
  252. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  253. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  254. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  255.     <dubbo:method name="sayHello" return="false" />
  256. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  257. </dubbo:reference>listener.referred(invoker);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  258. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  259.     <dubbo:method name="sayHello" return="false" />
  260. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  261. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  262. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  263.     <dubbo:method name="sayHello" return="false" />
  264. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  265. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  266. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  267.     <dubbo:method name="sayHello" return="false" />
  268. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  269. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  270. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  271.     <dubbo:method name="sayHello" return="false" />
  272. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  273. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  274. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  275.     <dubbo:method name="sayHello" return="false" />
  276. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  277. </dubbo:reference>} catch (Throwable t) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  278. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  279.     <dubbo:method name="sayHello" return="false" />
  280. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  281. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  282. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  283.     <dubbo:method name="sayHello" return="false" />
  284. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  285. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  286. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  287.     <dubbo:method name="sayHello" return="false" />
  288. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  289. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  290. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  291.     <dubbo:method name="sayHello" return="false" />
  292. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  293. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  294. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  295.     <dubbo:method name="sayHello" return="false" />
  296. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  297. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  298. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  299.     <dubbo:method name="sayHello" return="false" />
  300. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  301. </dubbo:reference>logger.error(t.getMessage(), t);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  302. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  303.     <dubbo:method name="sayHello" return="false" />
  304. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  305. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  306. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  307.     <dubbo:method name="sayHello" return="false" />
  308. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  309. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  310. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  311.     <dubbo:method name="sayHello" return="false" />
  312. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  313. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  314. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  315.     <dubbo:method name="sayHello" return="false" />
  316. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  317. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  318. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  319.     <dubbo:method name="sayHello" return="false" />
  320. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  321. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  322. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  323.     <dubbo:method name="sayHello" return="false" />
  324. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  325. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  326. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  327.     <dubbo:method name="sayHello" return="false" />
  328. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  329. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  330. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  331.     <dubbo:method name="sayHello" return="false" />
  332. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  333. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  334. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  335.     <dubbo:method name="sayHello" return="false" />
  336. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  337. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  338. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  339.     <dubbo:method name="sayHello" return="false" />
  340. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  341. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  342. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  343.     <dubbo:method name="sayHello" return="false" />
  344. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  345. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  346. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  347.     <dubbo:method name="sayHello" return="false" />
  348. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  349. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  350. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  351.     <dubbo:method name="sayHello" return="false" />
  352. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  353. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  354. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  355.     <dubbo:method name="sayHello" return="false" />
  356. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  357. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  358. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  359.     <dubbo:method name="sayHello" return="false" />
  360. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  361. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  362. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  363.     <dubbo:method name="sayHello" return="false" />
  364. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  365. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  366. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  367.     <dubbo:method name="sayHello" return="false" />
  368. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  369. </dubbo:reference>public void destroy() {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  370. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  371.     <dubbo:method name="sayHello" return="false" />
  372. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  373. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  374. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  375.     <dubbo:method name="sayHello" return="false" />
  376. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  377. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  378. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  379.     <dubbo:method name="sayHello" return="false" />
  380. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  381. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  382. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  383.     <dubbo:method name="sayHello" return="false" />
  384. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  385. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  386. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  387.     <dubbo:method name="sayHello" return="false" />
  388. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  389. </dubbo:reference>invoker.destroy();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  390. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  391.     <dubbo:method name="sayHello" return="false" />
  392. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  393. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  394. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  395.     <dubbo:method name="sayHello" return="false" />
  396. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  397. </dubbo:reference>} finally {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  398. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  399.     <dubbo:method name="sayHello" return="false" />
  400. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  401. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  402. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  403.     <dubbo:method name="sayHello" return="false" />
  404. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  405. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  406. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  407.     <dubbo:method name="sayHello" return="false" />
  408. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  409. </dubbo:reference>if (listeners != null && !listeners.isEmpty()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  410. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  411.     <dubbo:method name="sayHello" return="false" />
  412. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  413. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  414. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  415.     <dubbo:method name="sayHello" return="false" />
  416. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  417. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  418. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  419.     <dubbo:method name="sayHello" return="false" />
  420. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  421. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  422. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  423.     <dubbo:method name="sayHello" return="false" />
  424. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  425. </dubbo:reference>for (InvokerListener listener : listeners) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  426. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  427.     <dubbo:method name="sayHello" return="false" />
  428. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  429. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  430. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  431.     <dubbo:method name="sayHello" return="false" />
  432. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  433. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  434. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  435.     <dubbo:method name="sayHello" return="false" />
  436. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  437. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  438. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  439.     <dubbo:method name="sayHello" return="false" />
  440. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  441. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  442. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  443.     <dubbo:method name="sayHello" return="false" />
  444. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  445. </dubbo:reference>if (listener != null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  446. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  447.     <dubbo:method name="sayHello" return="false" />
  448. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  449. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  450. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  451.     <dubbo:method name="sayHello" return="false" />
  452. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  453. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  454. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  455.     <dubbo:method name="sayHello" return="false" />
  456. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  457. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  458. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  459.     <dubbo:method name="sayHello" return="false" />
  460. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  461. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  462. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  463.     <dubbo:method name="sayHello" return="false" />
  464. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  465. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  466. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  467.     <dubbo:method name="sayHello" return="false" />
  468. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  469. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  470. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  471.     <dubbo:method name="sayHello" return="false" />
  472. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  473. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  474. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  475.     <dubbo:method name="sayHello" return="false" />
  476. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  477. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  478. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  479.     <dubbo:method name="sayHello" return="false" />
  480. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  481. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  482. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  483.     <dubbo:method name="sayHello" return="false" />
  484. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  485. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  486. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  487.     <dubbo:method name="sayHello" return="false" />
  488. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  489. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  490. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  491.     <dubbo:method name="sayHello" return="false" />
  492. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  493. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  494. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  495.     <dubbo:method name="sayHello" return="false" />
  496. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  497. </dubbo:reference>listener.destroyed(invoker);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  498. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  499.     <dubbo:method name="sayHello" return="false" />
  500. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  501. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  502. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  503.     <dubbo:method name="sayHello" return="false" />
  504. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  505. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  506. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  507.     <dubbo:method name="sayHello" return="false" />
  508. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  509. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  510. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  511.     <dubbo:method name="sayHello" return="false" />
  512. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  513. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  514. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  515.     <dubbo:method name="sayHello" return="false" />
  516. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  517. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  518. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  519.     <dubbo:method name="sayHello" return="false" />
  520. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  521. </dubbo:reference>} catch (Throwable t) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  522. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  523.     <dubbo:method name="sayHello" return="false" />
  524. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  525. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  526. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  527.     <dubbo:method name="sayHello" return="false" />
  528. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  529. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  530. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  531.     <dubbo:method name="sayHello" return="false" />
  532. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  533. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  534. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  535.     <dubbo:method name="sayHello" return="false" />
  536. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  537. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  538. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  539.     <dubbo:method name="sayHello" return="false" />
  540. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  541. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  542. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  543.     <dubbo:method name="sayHello" return="false" />
  544. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  545. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  546. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  547.     <dubbo:method name="sayHello" return="false" />
  548. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  549. </dubbo:reference>logger.error(t.getMessage(), t);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  550. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  551.     <dubbo:method name="sayHello" return="false" />
  552. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  553. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  554. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  555.     <dubbo:method name="sayHello" return="false" />
  556. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  557. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  558. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  559.     <dubbo:method name="sayHello" return="false" />
  560. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  561. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  562. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  563.     <dubbo:method name="sayHello" return="false" />
  564. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  565. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  566. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  567.     <dubbo:method name="sayHello" return="false" />
  568. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  569. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  570. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  571.     <dubbo:method name="sayHello" return="false" />
  572. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  573. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  574. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  575.     <dubbo:method name="sayHello" return="false" />
  576. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  577. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  578. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  579.     <dubbo:method name="sayHello" return="false" />
  580. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  581. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  582. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  583.     <dubbo:method name="sayHello" return="false" />
  584. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  585. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  586. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  587.     <dubbo:method name="sayHello" return="false" />
  588. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  589. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  590. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  591.     <dubbo:method name="sayHello" return="false" />
  592. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  593. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  594. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  595.     <dubbo:method name="sayHello" return="false" />
  596. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  597. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  598. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  599.     <dubbo:method name="sayHello" return="false" />
  600. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  601. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  602. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  603.     <dubbo:method name="sayHello" return="false" />
  604. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  605. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  606. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  607.     <dubbo:method name="sayHello" return="false" />
  608. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  609. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  610. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  611.     <dubbo:method name="sayHello" return="false" />
  612. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  613. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  614. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  615.     <dubbo:method name="sayHello" return="false" />
  616. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  617. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  618. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  619.     <dubbo:method name="sayHello" return="false" />
  620. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  621. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  622. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  623.     <dubbo:method name="sayHello" return="false" />
  624. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  625. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  626. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  627.     <dubbo:method name="sayHello" return="false" />
  628. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  629. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  630. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  631.     <dubbo:method name="sayHello" return="false" />
  632. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  633. </dubbo:reference>}}
复制代码
总结一下:
ProtocolFilterWrapper是 Invoker 过滤器的支持,dubbo的过滤器用的也是责任链模式ListenerInvokerWrapper是 Invoker 监听器的支持
2.1.3 DubboInvoker

上面啰嗦了很多,终于回到主线 DubboInvoker 。它继承自 AbstractInvoker ,invoke 方法在抽象父类中
  1. public abstract class AbstractInvoker implements Invoker {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>public Result invoke(Invocation inv) throws RpcException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>RpcInvocation invocation = (RpcInvocation) inv;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference>// 设置 Invoker<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference>invocation.setInvoker(this);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference>if (attachment != null && attachment.size() > 0) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>// 设置 attachment<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference>invocation.addAttachmentsIfAbsent(attachment);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference>Map contextAttachments = RpcContext.getContext().getAttachments();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>if (contextAttachments != null && contextAttachments.size() != 0) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference>// 添加 contextAttachments 到 RpcInvocation#attachment 变量中<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference>invocation.addAttachments(contextAttachments);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference>if (getUrl().getMethodParameter(invocation.getMethodName(), Constants.ASYNC_KEY, false)) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference>// 设置异步信息到 RpcInvocation#attachment 中<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference>invocation.setAttachment(Constants.ASYNC_KEY, Boolean.TRUE.toString());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference>// 添加调用id<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference>RpcUtils.attachInvocationIdIfAsync(getUrl(), invocation);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference>Byte serializationId = CodecSupport.getIDByName(getUrl().getParameter(SERIALIZATION_KEY, DEFAULT_REMOTING_SERIALIZATION));<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference>if (serializationId != null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference>invocation.put(SERIALIZATION_ID_KEY, serializationId);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  218. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  219.     <dubbo:method name="sayHello" return="false" />
  220. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  221. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  222. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  223.     <dubbo:method name="sayHello" return="false" />
  224. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  225. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  226. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  227.     <dubbo:method name="sayHello" return="false" />
  228. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  229. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  230. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  231.     <dubbo:method name="sayHello" return="false" />
  232. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  233. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  234. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  235.     <dubbo:method name="sayHello" return="false" />
  236. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  237. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  238. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  239.     <dubbo:method name="sayHello" return="false" />
  240. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  241. </dubbo:reference>// 抽象方法,由子类实现<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  242. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  243.     <dubbo:method name="sayHello" return="false" />
  244. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  245. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  246. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  247.     <dubbo:method name="sayHello" return="false" />
  248. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  249. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  250. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  251.     <dubbo:method name="sayHello" return="false" />
  252. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  253. </dubbo:reference>return doInvoke(invocation);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  254. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  255.     <dubbo:method name="sayHello" return="false" />
  256. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  257. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  258. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  259.     <dubbo:method name="sayHello" return="false" />
  260. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  261. </dubbo:reference>} catch (InvocationTargetException e) { // biz exception<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  262. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  263.     <dubbo:method name="sayHello" return="false" />
  264. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  265. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  266. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  267.     <dubbo:method name="sayHello" return="false" />
  268. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  269. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  270. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  271.     <dubbo:method name="sayHello" return="false" />
  272. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  273. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  274. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  275.     <dubbo:method name="sayHello" return="false" />
  276. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  277. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  278. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  279.     <dubbo:method name="sayHello" return="false" />
  280. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  281. </dubbo:reference>} catch (RpcException e) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  282. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  283.     <dubbo:method name="sayHello" return="false" />
  284. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  285. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  286. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  287.     <dubbo:method name="sayHello" return="false" />
  288. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  289. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  290. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  291.     <dubbo:method name="sayHello" return="false" />
  292. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  293. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  294. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  295.     <dubbo:method name="sayHello" return="false" />
  296. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  297. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  298. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  299.     <dubbo:method name="sayHello" return="false" />
  300. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  301. </dubbo:reference>} catch (Throwable e) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  302. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  303.     <dubbo:method name="sayHello" return="false" />
  304. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  305. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  306. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  307.     <dubbo:method name="sayHello" return="false" />
  308. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  309. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  310. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  311.     <dubbo:method name="sayHello" return="false" />
  312. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  313. </dubbo:reference>return new RpcResult(e);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  314. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  315.     <dubbo:method name="sayHello" return="false" />
  316. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  317. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  318. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  319.     <dubbo:method name="sayHello" return="false" />
  320. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  321. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  322. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  323.     <dubbo:method name="sayHello" return="false" />
  324. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  325. </dubbo:reference>}}
复制代码
invoke 方法中,主要用于添加信息到 RpcInvocation#attachment 中,给后续的逻辑使用。重点是 doInvoke 方法,这是一个抽象方法,由子类 DubboInvoker 实现。
  1. @Overrideprotected Result doInvoke(final Invocation invocation) throws Throwable {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>RpcInvocation inv = (RpcInvocation) invocation;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>final String methodName = RpcUtils.getMethodName(invocation);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference>// 设置 path 和 version 到 attachment 中<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>inv.setAttachment(Constants.PATH_KEY, getUrl().getPath());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>inv.setAttachment(Constants.VERSION_KEY, version);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>ExchangeClient currentClient;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>if (clients.length == 1) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>// 从 clients 数组中获取 ExchangeClient<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference>currentClient = clients[0];<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference>} else {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference>currentClient = clients[index.getAndIncrement() % clients.length];<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference>// 获取异步配置<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>boolean isAsync = RpcUtils.isAsync(getUrl(), invocation);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference>// isOneway 为 true,表示“单向”通信<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>boolean isOneway = RpcUtils.isOneway(getUrl(), invocation);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference>int timeout = getUrl().getMethodParameter(methodName, Constants.TIMEOUT_KEY, Constants.DEFAULT_TIMEOUT);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference>// 异步无返回值<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference>if (isOneway) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference>boolean isSent = getUrl().getMethodParameter(methodName, Constants.SENT_KEY, false);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference>// 发送请求<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference>currentClient.send(inv, isSent);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference>// 设置上下文中的 future 字段为 null<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference>RpcContext.getContext().setFuture(null);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference>// 返回一个空的 RpcResult<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference>return new RpcResult();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference>// 异步有返回值<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  218. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  219.     <dubbo:method name="sayHello" return="false" />
  220. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  221. </dubbo:reference>} else if (isAsync) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  222. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  223.     <dubbo:method name="sayHello" return="false" />
  224. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  225. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  226. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  227.     <dubbo:method name="sayHello" return="false" />
  228. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  229. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  230. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  231.     <dubbo:method name="sayHello" return="false" />
  232. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  233. </dubbo:reference>// 发送请求,并得到一个 ResponseFuture 实例<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  234. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  235.     <dubbo:method name="sayHello" return="false" />
  236. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  237. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  238. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  239.     <dubbo:method name="sayHello" return="false" />
  240. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  241. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  242. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  243.     <dubbo:method name="sayHello" return="false" />
  244. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  245. </dubbo:reference>ResponseFuture future = currentClient.request(inv, timeout);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  246. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  247.     <dubbo:method name="sayHello" return="false" />
  248. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  249. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  250. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  251.     <dubbo:method name="sayHello" return="false" />
  252. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  253. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  254. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  255.     <dubbo:method name="sayHello" return="false" />
  256. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  257. </dubbo:reference>// 设置 future 到上下文中<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  258. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  259.     <dubbo:method name="sayHello" return="false" />
  260. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  261. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  262. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  263.     <dubbo:method name="sayHello" return="false" />
  264. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  265. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  266. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  267.     <dubbo:method name="sayHello" return="false" />
  268. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  269. </dubbo:reference>RpcContext.getContext().setFuture(new FutureAdapter(future));<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  270. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  271.     <dubbo:method name="sayHello" return="false" />
  272. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  273. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  274. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  275.     <dubbo:method name="sayHello" return="false" />
  276. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  277. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  278. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  279.     <dubbo:method name="sayHello" return="false" />
  280. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  281. </dubbo:reference>// 暂时返回一个空结果<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  282. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  283.     <dubbo:method name="sayHello" return="false" />
  284. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  285. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  286. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  287.     <dubbo:method name="sayHello" return="false" />
  288. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  289. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  290. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  291.     <dubbo:method name="sayHello" return="false" />
  292. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  293. </dubbo:reference>return new RpcResult();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  294. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  295.     <dubbo:method name="sayHello" return="false" />
  296. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  297. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  298. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  299.     <dubbo:method name="sayHello" return="false" />
  300. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  301. </dubbo:reference>// 同步调用<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  302. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  303.     <dubbo:method name="sayHello" return="false" />
  304. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  305. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  306. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  307.     <dubbo:method name="sayHello" return="false" />
  308. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  309. </dubbo:reference>} else {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  310. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  311.     <dubbo:method name="sayHello" return="false" />
  312. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  313. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  314. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  315.     <dubbo:method name="sayHello" return="false" />
  316. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  317. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  318. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  319.     <dubbo:method name="sayHello" return="false" />
  320. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  321. </dubbo:reference>RpcContext.getContext().setFuture(null);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  322. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  323.     <dubbo:method name="sayHello" return="false" />
  324. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  325. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  326. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  327.     <dubbo:method name="sayHello" return="false" />
  328. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  329. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  330. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  331.     <dubbo:method name="sayHello" return="false" />
  332. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  333. </dubbo:reference>// 发送请求,得到一个 ResponseFuture 实例,并调用该实例的 get 方法进行等待<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  334. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  335.     <dubbo:method name="sayHello" return="false" />
  336. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  337. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  338. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  339.     <dubbo:method name="sayHello" return="false" />
  340. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  341. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  342. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  343.     <dubbo:method name="sayHello" return="false" />
  344. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  345. </dubbo:reference>return (Result) currentClient.request(inv, timeout).get();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  346. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  347.     <dubbo:method name="sayHello" return="false" />
  348. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  349. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  350. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  351.     <dubbo:method name="sayHello" return="false" />
  352. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  353. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  354. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  355.     <dubbo:method name="sayHello" return="false" />
  356. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  357. </dubbo:reference>} catch (TimeoutException e) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  358. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  359.     <dubbo:method name="sayHello" return="false" />
  360. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  361. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  362. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  363.     <dubbo:method name="sayHello" return="false" />
  364. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  365. </dubbo:reference>throw new RpcException(RpcException.TIMEOUT_EXCEPTION, "Invoke remote method timeout. method: " + invocation.getMethodName() + ", provider: " + getUrl() + ", cause: " + e.getMessage(), e);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  366. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  367.     <dubbo:method name="sayHello" return="false" />
  368. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  369. </dubbo:reference>} catch (RemotingException e) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  370. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  371.     <dubbo:method name="sayHello" return="false" />
  372. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  373. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  374. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  375.     <dubbo:method name="sayHello" return="false" />
  376. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  377. </dubbo:reference>throw new RpcException(RpcException.NETWORK_EXCEPTION, "Failed to invoke remote method: " + invocation.getMethodName() + ", provider: " + getUrl() + ", cause: " + e.getMessage(), e);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  378. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  379.     <dubbo:method name="sayHello" return="false" />
  380. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  381. </dubbo:reference>}}
复制代码
doInvoke 方法主要是对同步和异步调用的逻辑处理。可以看到,在有返回值的情况下,同步和异步都是通过 currentClient.request 来发送请求。区别在于,同步调用会使用 ResponseFuture#get 方法阻塞,知道请求完成,得到返回值。而异步是将 ResponseFuture 放到上下文对象中,返回空结果。
FutureAdapter 是一个适配器,它实现了 jdk 内置的 Future 接口,将 ResponseFuture 转换成 Future 的用法,更贴合用户习惯。这里我们的重点是ResponseFuture是如何支持异步调用的,这个接口的默认实现是DefaultFuture
  1. public class DefaultFuture implements ResponseFuture {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>private static final Map CHANNELS = new ConcurrentHashMap();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>private static final Map FUTURES = new ConcurrentHashMap();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference>private final Lock lock = new ReentrantLock();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>private final Condition done = lock.newCondition();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>// 构造方法<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>public DefaultFuture(Channel channel, Request request, int timeout) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>this.channel = channel;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference>this.request = request;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference>// 获取请求 id,这个 id 很重要,后面还会见到<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>this.id = request.getId();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference>this.timeout = timeout > 0 ? timeout : channel.getUrl().getPositiveParameter(Constants.TIMEOUT_KEY, Constants.DEFAULT_TIMEOUT);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference>// 存储  映射关系到 FUTURES 中<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference>FUTURES.put(id, this);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference>CHANNELS.put(id, channel);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference>// 阻塞等待并获取请求结果<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference>public Object get() throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference>return get(timeout);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference>public Object get(int timeout) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference>if (timeout  timeout) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference>break;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference>} catch (InterruptedException e) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  218. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  219.     <dubbo:method name="sayHello" return="false" />
  220. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  221. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  222. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  223.     <dubbo:method name="sayHello" return="false" />
  224. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  225. </dubbo:reference>throw new RuntimeException(e);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  226. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  227.     <dubbo:method name="sayHello" return="false" />
  228. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  229. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  230. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  231.     <dubbo:method name="sayHello" return="false" />
  232. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  233. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  234. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  235.     <dubbo:method name="sayHello" return="false" />
  236. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  237. </dubbo:reference>} finally {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  238. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  239.     <dubbo:method name="sayHello" return="false" />
  240. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  241. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  242. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  243.     <dubbo:method name="sayHello" return="false" />
  244. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  245. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  246. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  247.     <dubbo:method name="sayHello" return="false" />
  248. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  249. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  250. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  251.     <dubbo:method name="sayHello" return="false" />
  252. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  253. </dubbo:reference>lock.unlock();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  254. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  255.     <dubbo:method name="sayHello" return="false" />
  256. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  257. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  258. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  259.     <dubbo:method name="sayHello" return="false" />
  260. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  261. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  262. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  263.     <dubbo:method name="sayHello" return="false" />
  264. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  265. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  266. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  267.     <dubbo:method name="sayHello" return="false" />
  268. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  269. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  270. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  271.     <dubbo:method name="sayHello" return="false" />
  272. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  273. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  274. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  275.     <dubbo:method name="sayHello" return="false" />
  276. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  277. </dubbo:reference>// 如果调用结果仍未返回,则抛出超时异常<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  278. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  279.     <dubbo:method name="sayHello" return="false" />
  280. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  281. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  282. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  283.     <dubbo:method name="sayHello" return="false" />
  284. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  285. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  286. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  287.     <dubbo:method name="sayHello" return="false" />
  288. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  289. </dubbo:reference>if (!isDone()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  290. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  291.     <dubbo:method name="sayHello" return="false" />
  292. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  293. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  294. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  295.     <dubbo:method name="sayHello" return="false" />
  296. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  297. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  298. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  299.     <dubbo:method name="sayHello" return="false" />
  300. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  301. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  302. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  303.     <dubbo:method name="sayHello" return="false" />
  304. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  305. </dubbo:reference>throw new TimeoutException(sent > 0, channel, getTimeoutMessage(false));<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  306. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  307.     <dubbo:method name="sayHello" return="false" />
  308. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  309. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  310. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  311.     <dubbo:method name="sayHello" return="false" />
  312. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  313. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  314. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  315.     <dubbo:method name="sayHello" return="false" />
  316. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  317. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  318. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  319.     <dubbo:method name="sayHello" return="false" />
  320. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  321. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  322. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  323.     <dubbo:method name="sayHello" return="false" />
  324. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  325. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  326. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  327.     <dubbo:method name="sayHello" return="false" />
  328. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  329. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  330. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  331.     <dubbo:method name="sayHello" return="false" />
  332. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  333. </dubbo:reference>return returnFromResponse();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  334. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  335.     <dubbo:method name="sayHello" return="false" />
  336. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  337. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  338. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  339.     <dubbo:method name="sayHello" return="false" />
  340. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  341. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  342. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  343.     <dubbo:method name="sayHello" return="false" />
  344. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  345. </dubbo:reference>public boolean isDone() {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  346. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  347.     <dubbo:method name="sayHello" return="false" />
  348. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  349. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  350. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  351.     <dubbo:method name="sayHello" return="false" />
  352. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  353. </dubbo:reference>// 通过检测 response 字段为空与否,判断是否收到了调用结果<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  354. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  355.     <dubbo:method name="sayHello" return="false" />
  356. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  357. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  358. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  359.     <dubbo:method name="sayHello" return="false" />
  360. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  361. </dubbo:reference>return response != null;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  362. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  363.     <dubbo:method name="sayHello" return="false" />
  364. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  365. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  366. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  367.     <dubbo:method name="sayHello" return="false" />
  368. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  369. </dubbo:reference>// 当请求有响应时,调用此方法<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  370. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  371.     <dubbo:method name="sayHello" return="false" />
  372. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  373. </dubbo:reference>public static void received(Channel channel, Response response) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  374. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  375.     <dubbo:method name="sayHello" return="false" />
  376. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  377. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  378. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  379.     <dubbo:method name="sayHello" return="false" />
  380. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  381. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  382. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  383.     <dubbo:method name="sayHello" return="false" />
  384. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  385. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  386. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  387.     <dubbo:method name="sayHello" return="false" />
  388. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  389. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  390. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  391.     <dubbo:method name="sayHello" return="false" />
  392. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  393. </dubbo:reference>// 根据调用编号从 FUTURES 集合中查找指定的 DefaultFuture 对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  394. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  395.     <dubbo:method name="sayHello" return="false" />
  396. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  397. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  398. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  399.     <dubbo:method name="sayHello" return="false" />
  400. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  401. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  402. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  403.     <dubbo:method name="sayHello" return="false" />
  404. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  405. </dubbo:reference>DefaultFuture future = FUTURES.remove(response.getId());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  406. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  407.     <dubbo:method name="sayHello" return="false" />
  408. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  409. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  410. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  411.     <dubbo:method name="sayHello" return="false" />
  412. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  413. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  414. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  415.     <dubbo:method name="sayHello" return="false" />
  416. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  417. </dubbo:reference>if (future != null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  418. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  419.     <dubbo:method name="sayHello" return="false" />
  420. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  421. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  422. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  423.     <dubbo:method name="sayHello" return="false" />
  424. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  425. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  426. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  427.     <dubbo:method name="sayHello" return="false" />
  428. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  429. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  430. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  431.     <dubbo:method name="sayHello" return="false" />
  432. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  433. </dubbo:reference>future.doReceived(response);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  434. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  435.     <dubbo:method name="sayHello" return="false" />
  436. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  437. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  438. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  439.     <dubbo:method name="sayHello" return="false" />
  440. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  441. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  442. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  443.     <dubbo:method name="sayHello" return="false" />
  444. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  445. </dubbo:reference>} else {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  446. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  447.     <dubbo:method name="sayHello" return="false" />
  448. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  449. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  450. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  451.     <dubbo:method name="sayHello" return="false" />
  452. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  453. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  454. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  455.     <dubbo:method name="sayHello" return="false" />
  456. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  457. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  458. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  459.     <dubbo:method name="sayHello" return="false" />
  460. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  461. </dubbo:reference>// 这是请求超时,但是结果返回了的警告<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  462. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  463.     <dubbo:method name="sayHello" return="false" />
  464. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  465. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  466. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  467.     <dubbo:method name="sayHello" return="false" />
  468. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  469. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  470. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  471.     <dubbo:method name="sayHello" return="false" />
  472. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  473. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  474. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  475.     <dubbo:method name="sayHello" return="false" />
  476. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  477. </dubbo:reference>logger.warn("...");<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  478. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  479.     <dubbo:method name="sayHello" return="false" />
  480. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  481. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  482. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  483.     <dubbo:method name="sayHello" return="false" />
  484. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  485. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  486. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  487.     <dubbo:method name="sayHello" return="false" />
  488. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  489. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  490. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  491.     <dubbo:method name="sayHello" return="false" />
  492. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  493. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  494. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  495.     <dubbo:method name="sayHello" return="false" />
  496. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  497. </dubbo:reference>} finally {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  498. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  499.     <dubbo:method name="sayHello" return="false" />
  500. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  501. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  502. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  503.     <dubbo:method name="sayHello" return="false" />
  504. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  505. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  506. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  507.     <dubbo:method name="sayHello" return="false" />
  508. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  509. </dubbo:reference>CHANNELS.remove(response.getId());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  510. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  511.     <dubbo:method name="sayHello" return="false" />
  512. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  513. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  514. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  515.     <dubbo:method name="sayHello" return="false" />
  516. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  517. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  518. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  519.     <dubbo:method name="sayHello" return="false" />
  520. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  521. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  522. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  523.     <dubbo:method name="sayHello" return="false" />
  524. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  525. </dubbo:reference>private void doReceived(Response res) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  526. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  527.     <dubbo:method name="sayHello" return="false" />
  528. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  529. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  530. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  531.     <dubbo:method name="sayHello" return="false" />
  532. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  533. </dubbo:reference>lock.lock();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  534. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  535.     <dubbo:method name="sayHello" return="false" />
  536. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  537. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  538. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  539.     <dubbo:method name="sayHello" return="false" />
  540. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  541. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  542. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  543.     <dubbo:method name="sayHello" return="false" />
  544. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  545. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  546. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  547.     <dubbo:method name="sayHello" return="false" />
  548. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  549. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  550. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  551.     <dubbo:method name="sayHello" return="false" />
  552. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  553. </dubbo:reference>// 保存响应对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  554. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  555.     <dubbo:method name="sayHello" return="false" />
  556. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  557. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  558. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  559.     <dubbo:method name="sayHello" return="false" />
  560. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  561. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  562. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  563.     <dubbo:method name="sayHello" return="false" />
  564. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  565. </dubbo:reference>response = res;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  566. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  567.     <dubbo:method name="sayHello" return="false" />
  568. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  569. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  570. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  571.     <dubbo:method name="sayHello" return="false" />
  572. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  573. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  574. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  575.     <dubbo:method name="sayHello" return="false" />
  576. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  577. </dubbo:reference>if (done != null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  578. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  579.     <dubbo:method name="sayHello" return="false" />
  580. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  581. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  582. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  583.     <dubbo:method name="sayHello" return="false" />
  584. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  585. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  586. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  587.     <dubbo:method name="sayHello" return="false" />
  588. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  589. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  590. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  591.     <dubbo:method name="sayHello" return="false" />
  592. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  593. </dubbo:reference>// 唤醒用户线程<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  594. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  595.     <dubbo:method name="sayHello" return="false" />
  596. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  597. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  598. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  599.     <dubbo:method name="sayHello" return="false" />
  600. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  601. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  602. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  603.     <dubbo:method name="sayHello" return="false" />
  604. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  605. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  606. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  607.     <dubbo:method name="sayHello" return="false" />
  608. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  609. </dubbo:reference>done.signal();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  610. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  611.     <dubbo:method name="sayHello" return="false" />
  612. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  613. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  614. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  615.     <dubbo:method name="sayHello" return="false" />
  616. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  617. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  618. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  619.     <dubbo:method name="sayHello" return="false" />
  620. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  621. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  622. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  623.     <dubbo:method name="sayHello" return="false" />
  624. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  625. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  626. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  627.     <dubbo:method name="sayHello" return="false" />
  628. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  629. </dubbo:reference>} finally {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  630. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  631.     <dubbo:method name="sayHello" return="false" />
  632. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  633. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  634. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  635.     <dubbo:method name="sayHello" return="false" />
  636. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  637. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  638. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  639.     <dubbo:method name="sayHello" return="false" />
  640. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  641. </dubbo:reference>lock.unlock();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  642. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  643.     <dubbo:method name="sayHello" return="false" />
  644. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  645. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  646. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  647.     <dubbo:method name="sayHello" return="false" />
  648. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  649. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  650. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  651.     <dubbo:method name="sayHello" return="false" />
  652. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  653. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  654. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  655.     <dubbo:method name="sayHello" return="false" />
  656. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  657. </dubbo:reference>if (callback != null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  658. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  659.     <dubbo:method name="sayHello" return="false" />
  660. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  661. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  662. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  663.     <dubbo:method name="sayHello" return="false" />
  664. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  665. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  666. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  667.     <dubbo:method name="sayHello" return="false" />
  668. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  669. </dubbo:reference>invokeCallback(callback);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  670. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  671.     <dubbo:method name="sayHello" return="false" />
  672. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  673. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  674. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  675.     <dubbo:method name="sayHello" return="false" />
  676. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  677. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  678. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  679.     <dubbo:method name="sayHello" return="false" />
  680. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  681. </dubbo:reference>}}
复制代码
上面对DefaultFuture做了部分代码精简。get 方法阻塞等待返回值。而 received 方法则是在请求有相应时,保存响应对象并唤醒 get 方法中的循环。这里是很典型的 future 结构的写法,有疑问的同学可以去了解下 Java 的并发知识。
2.2 服务消费方发送请求

上节讲了 Dubbo 的同步、异步调用方式。本节来讲讲有返回值的情况下,Dubbo 消费方是如何发送请求的。
我们把实现拉回 DubboInvoker#doInvoke 方法中,其有返回值的请求方法为 currentClient.request(inv, timeout),currentClient 为ReferenceCountExchangeClient,我们看下面这张调用栈图


  • ReferenceCountExchangeClient:为 ExchangeClient 添加引用计数功能
  • HeaderExchangeClient:内部持有 client ,并封装了心跳的功能
从 DubboInvoker 到 HeaderExchangeChannel,在 服务引用 文章就讲过了,这里不再赘述。下面直接看HeaderExchangeChannel 中的 request 方法
  1. public ResponseFuture request(Object request, int timeout) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>if (closed) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference>throw new RemotingException(this.getLocalAddress(), null, "Failed to send request " + request + ", cause: The channel " + this + " is closed!");<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>// create request.<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>// 创建 Request 对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>Request req = new Request();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference>req.setVersion(Version.getProtocolVersion());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>// 设置双向通信标志为 true<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference>req.setTwoWay(true);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference>// 这里的 request 变量类型为 RpcInvocation<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference>req.setData(request);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference>// 创建 DefaultFuture 对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference>DefaultFuture future = new DefaultFuture(channel, req, timeout);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference>// 调用 NettyClient 的 send 方法发送请求(在父类AbstractPeer中)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference>channel.send(req);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>} catch (RemotingException e) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference>future.cancel();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>throw e;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference>// 返回 DefaultFuture 对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference>return future;}
复制代码
从上面的方法可以看到,将请求数据封装成 Request 对象,传递给 DefaultFuture,再发送出去。Request 在构造方法中会创建请求id,用于在接收到响应时,确定是哪个请求的响应。继续看请求的发送方法 channel.send(req),channel 是 NettyClient,结合类图看调用路径
  1. public abstract class AbstractPeer implements Endpoint, ChannelHandler {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>public void send(Object message) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>send(message, url.getParameter(Constants.SENT_KEY, false));<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>}}public abstract class AbstractClient extends AbstractEndpoint implements Client {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>public void send(Object message, boolean sent) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference>if (send_reconnect && !isConnected()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference>connect();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>// 获取 Channel,getChannel 是一个抽象方法,具体由子类实现<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference>Channel channel = getChannel();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference>if (channel == null || !channel.isConnected()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference>throw new RemotingException(this, "message can not send, because channel is closed . url:" + getUrl());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference>// 继续向下调用<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference>channel.send(message, sent);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference>}}
复制代码
这里就两个重点,获取 channel 和 使用 channel 继续往下调用。先看看如何获取 channel
  1. public class NettyClient extends AbstractClient {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>protected com.alibaba.dubbo.remoting.Channel getChannel() {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>Channel c = channel;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>if (c == null || !c.isActive()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>return null;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference>// 获取一个 NettyChannel 类型对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>return NettyChannel.getOrAddChannel(c, getUrl(), this);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference>}}final class NettyChannel extends AbstractChannel {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference>// 私有构造方法<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference>private NettyChannel(Channel channel, URL url, ChannelHandler handler) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>super(url, handler);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference>if (channel == null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference>throw new IllegalArgumentException("netty channel == null;");<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference>this.channel = channel;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference>static NettyChannel getOrAddChannel(Channel ch, URL url, ChannelHandler handler) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference>if (ch == null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference>return null;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference>// 尝试从集合中获取 NettyChannel 实例<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference>NettyChannel ret = channelMap.get(ch);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference>if (ret == null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference>// 如果 ret = null,则创建一个新的 NettyChannel 实例<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference>NettyChannel nettyChannel = new NettyChannel(ch, url, handler);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference>if (ch.isActive()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  218. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  219.     <dubbo:method name="sayHello" return="false" />
  220. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  221. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  222. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  223.     <dubbo:method name="sayHello" return="false" />
  224. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  225. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  226. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  227.     <dubbo:method name="sayHello" return="false" />
  228. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  229. </dubbo:reference>ret = channelMap.putIfAbsent(ch, nettyChannel);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  230. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  231.     <dubbo:method name="sayHello" return="false" />
  232. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  233. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  234. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  235.     <dubbo:method name="sayHello" return="false" />
  236. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  237. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  238. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  239.     <dubbo:method name="sayHello" return="false" />
  240. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  241. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  242. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  243.     <dubbo:method name="sayHello" return="false" />
  244. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  245. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  246. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  247.     <dubbo:method name="sayHello" return="false" />
  248. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  249. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  250. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  251.     <dubbo:method name="sayHello" return="false" />
  252. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  253. </dubbo:reference>if (ret == null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  254. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  255.     <dubbo:method name="sayHello" return="false" />
  256. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  257. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  258. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  259.     <dubbo:method name="sayHello" return="false" />
  260. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  261. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  262. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  263.     <dubbo:method name="sayHello" return="false" />
  264. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  265. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  266. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  267.     <dubbo:method name="sayHello" return="false" />
  268. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  269. </dubbo:reference>ret = nettyChannel;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  270. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  271.     <dubbo:method name="sayHello" return="false" />
  272. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  273. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  274. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  275.     <dubbo:method name="sayHello" return="false" />
  276. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  277. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  278. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  279.     <dubbo:method name="sayHello" return="false" />
  280. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  281. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  282. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  283.     <dubbo:method name="sayHello" return="false" />
  284. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  285. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  286. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  287.     <dubbo:method name="sayHello" return="false" />
  288. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  289. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  290. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  291.     <dubbo:method name="sayHello" return="false" />
  292. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  293. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  294. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  295.     <dubbo:method name="sayHello" return="false" />
  296. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  297. </dubbo:reference>return ret;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  298. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  299.     <dubbo:method name="sayHello" return="false" />
  300. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  301. </dubbo:reference>}}
复制代码
获取 channel 的逻辑很简单,从缓存获取 NettyChannel,没有则创建。下面继续看 channel.send(message, sent)
  1. public void send(Object message, boolean sent) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>super.send(message, sent);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>boolean success = true;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference>int timeout = 0;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>// 发送消息(包含请求和响应消息)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference>ChannelFuture future = channel.writeAndFlush(message);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference>// sent 的值源于  中 sent 的配置值,有两种配置值:<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference>//   1. true: 等待消息发出,消息发送失败将抛出异常<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference>//   2. false: 不等待消息发出,将消息放入 IO 队列,即刻返回<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference>// 默认情况下 sent = false;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference>if (sent) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference>timeout = getUrl().getPositiveParameter(Constants.TIMEOUT_KEY, Constants.DEFAULT_TIMEOUT);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>// 等待消息发出,若在规定时间没能发出,success 会被置为 false<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference>success = future.await(timeout);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference>Throwable cause = future.cause();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference>if (cause != null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference>throw cause;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference>} catch (Throwable e) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference>throw new RemotingException(this, "Failed to send message " + message + " to " + getRemoteAddress() + ", cause: " + e.getMessage(), e);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference>// 若 success 为 false,这里抛出异常<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference>if (!success) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference>throw new RemotingException(this, "...");<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference>}}
复制代码
至此,请求数据的发送过程就结束了。涉及 Netty 的发送编解码处理过程,感兴趣的可以从 NettyClient#doOpen方法入手,这里鉴于篇幅,就不写了。
2.2.1 调用路径

下面我们来总结一下消费端调用发送请求过程的调用栈(以 DemoService 为例)
  1. proxy0#sayHello(String)  —> InvokerInvocationHandler#invoke(Object, Method, Object[])<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>—> MockClusterInvoker#invoke(Invocation)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>  —> AbstractClusterInvoker#invoke(Invocation)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>—> FailoverClusterInvoker#doInvoke(Invocation, List, LoadBalance)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>  —> Filter#invoke(Invoker, Invocation)  // 包含多个 Filter 调用<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>—> ListenerInvokerWrapper#invoke(Invocation)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference>   —> AbstractInvoker#invoke(Invocation)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference> —> DubboInvoker#doInvoke(Invocation)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>  —> ReferenceCountExchangeClient#request(Object, int)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference>—> HeaderExchangeClient#request(Object, int)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference>  —> HeaderExchangeChannel#request(Object, int)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference>—> AbstractPeer#send(Object)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference>  —> AbstractClient#send(Object, boolean)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference>—> NettyChannel#send(Object, boolean)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  218. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  219.     <dubbo:method name="sayHello" return="false" />
  220. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  221. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  222. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  223.     <dubbo:method name="sayHello" return="false" />
  224. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  225. </dubbo:reference>  —> NioClientSocketChannel#write(Object)
复制代码
2.3 服务提供方接收请求

默认情况下 Dubbo 使用 Netty 作为底层的通信框架,从 NettyServer#doOpen 方法知道,接收请求的入口在 NettyServerHandler#channelRead,这里已经是解码之后得到的数据。然后数据依次经过 MultiMessageHandler、HeartbeatHandler 以及 AllChannelHandler 。至于为什么是这几个类以及顺序,可以去看 NettyServer 的构造方法。下面我们首先看调用栈
  1. public class NettyServer extends AbstractServer implements Server {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>public NettyServer(URL url, ChannelHandler handler) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference>super(url, ChannelHandlers.wrap(handler, ExecutorUtil.setThreadName(url, SERVER_THREAD_POOL_NAME)));<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>}}public class ChannelHandlers {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>public static ChannelHandler wrap(ChannelHandler handler, URL url) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>return ChannelHandlers.getInstance().wrapInternal(handler, url);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference>}}public class ChannelHandlers {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>protected ChannelHandler wrapInternal(ChannelHandler handler, URL url) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference>return new MultiMessageHandler(new HeartbeatHandler(ExtensionLoader.getExtensionLoader(Dispatcher.class)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>.getAdaptiveExtension().dispatch(handler, url)));<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference>}}
复制代码
MultiMessageHandler、HeartbeatHandler 直接通过构造方法创建,而 AllChannelHandler 则由 Dispatcher 的默认自适应拓展类 AllDispatcher 创建。
2.3.1 线程派发模型

刚才讲到了 Dispatcher,这是一个线程派发器。让我们回顾一下 Dubbo 服务调用过程图(图片来自官方文档)

Dubbo 将底层通信框架中接收请求的线程称为 IO 线程。如果一些事件处理逻辑可以很快执行完,此时直接在 IO 线程上执行该段逻辑即可。但如果事件的处理逻辑比较耗时,比如该段逻辑会发起数据库查询或者 HTTP 请求。此时我们就不应该让事件处理逻辑在 IO 线程上执行,而是应该派发到线程池中去执行。原因也很简单,IO 线程主要用于接收请求,如果 IO 线程被占满,将导致它不能接收新的请求。PS:像不像Netty的主从模型,万物殊途同归啊。
Dispatcher 真实的职责创建具有线程派发能力的 ChannelHandler,比如 AllChannelHandler、MessageOnlyChannelHandler 和 ExecutionChannelHandler 等,其本身并不具备线程派发能力。Dubbo 支持 5 种不同的线程派发策略
策略用途all所有消息都派发到线程池,包括请求,响应,连接事件,断开事件等direct所有消息都不派发到线程池,全部在 IO 线程上直接执行message只有请求和响应消息派发到线程池,其它消息均在 IO 线程上执行execution只有请求消息派发到线程池,不含响应。其它消息均在 IO 线程上执行connection在 IO 线程上,将连接断开事件放入队列,有序逐个执行,其它消息派发到线程池下面我们看看默认的 AllChannelHandler
  1. public class AllChannelHandler extends WrappedChannelHandler {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>/** 处理请求和响应消息,这里的 message 变量类型可能是 Request,也可能是 Response */<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference>public void received(Channel channel, Object message) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>// 获取线程池,由自适应拓展生成,默认由 FixedThreadPool 生成<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>ExecutorService cexecutor = getExecutorService();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference>// 将请求和响应消息派发到线程池中处理<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>cexecutor.execute(new ChannelEventRunnable(channel, handler, ChannelState.RECEIVED, message));<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference>} catch (Throwable t) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference>        if(message instanceof Request && t instanceof RejectedExecutionException){<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference>                Request request = (Request)message;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>// 如果通信方式为双向通信,此时将 Server side ... threadpool is exhausted<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference>// 错误信息封装到 Response 中,并返回给服务消费方。<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference>                if(request.isTwoWay()){<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference>                        String msg = "Server side(" + url.getIp() + "," + url.getPort() + ") threadpool is exhausted ,detail msg:" + t.getMessage();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference>                        Response response = new Response(request.getId(), request.getVersion());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference>                        response.setStatus(Response.SERVER_THREADPOOL_EXHAUSTED_ERROR);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference>                        response.setErrorMessage(msg);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference>  // 返回包含错误信息的 Response 对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference>                        channel.send(response);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference>                        return;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference>                }<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference>        }<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference>throw new ExecutionException(message, channel, getClass() + " error when process received event .", t);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference>}}
复制代码
请求对象会被封装 ChannelEventRunnable 中,也就是 ChannelEventRunnable#run 方法才是实际处理请求的地方。
2.3.2 调用服务
  1. public class ChannelEventRunnable implements Runnable {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>public void run() {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>// 检测通道状态,对于请求或响应消息,此时 state = RECEIVED<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>if (state == ChannelState.RECEIVED) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference>// 将 channel 和 message 传给 ChannelHandler 对象,进行后续的调用<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference>handler.received(channel, message);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>} catch (Exception e) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>logger.warn("...", e);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference>// 其他消息类型通过 switch 进行处理<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference>} else {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference>switch (state) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference>case CONNECTED:<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference>case DISCONNECTED:<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference>case SENT:<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  218. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  219.     <dubbo:method name="sayHello" return="false" />
  220. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  221. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  222. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  223.     <dubbo:method name="sayHello" return="false" />
  224. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  225. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  226. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  227.     <dubbo:method name="sayHello" return="false" />
  228. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  229. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  230. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  231.     <dubbo:method name="sayHello" return="false" />
  232. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  233. </dubbo:reference>case CAUGHT:<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  234. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  235.     <dubbo:method name="sayHello" return="false" />
  236. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  237. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  238. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  239.     <dubbo:method name="sayHello" return="false" />
  240. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  241. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  242. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  243.     <dubbo:method name="sayHello" return="false" />
  244. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  245. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  246. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  247.     <dubbo:method name="sayHello" return="false" />
  248. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  249. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  250. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  251.     <dubbo:method name="sayHello" return="false" />
  252. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  253. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  254. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  255.     <dubbo:method name="sayHello" return="false" />
  256. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  257. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  258. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  259.     <dubbo:method name="sayHello" return="false" />
  260. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  261. </dubbo:reference>default:<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  262. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  263.     <dubbo:method name="sayHello" return="false" />
  264. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  265. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  266. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  267.     <dubbo:method name="sayHello" return="false" />
  268. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  269. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  270. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  271.     <dubbo:method name="sayHello" return="false" />
  272. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  273. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  274. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  275.     <dubbo:method name="sayHello" return="false" />
  276. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  277. </dubbo:reference>logger.warn("unknown state: " + state + ", message is " + message);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  278. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  279.     <dubbo:method name="sayHello" return="false" />
  280. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  281. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  282. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  283.     <dubbo:method name="sayHello" return="false" />
  284. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  285. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  286. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  287.     <dubbo:method name="sayHello" return="false" />
  288. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  289. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  290. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  291.     <dubbo:method name="sayHello" return="false" />
  292. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  293. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  294. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  295.     <dubbo:method name="sayHello" return="false" />
  296. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  297. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  298. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  299.     <dubbo:method name="sayHello" return="false" />
  300. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  301. </dubbo:reference>}}
复制代码
ChannelEventRunnable 依然不进行调用逻辑,只是根据通道的状态将请求转发。可以注意一下,这里特意对 RECEIVED 状态用了 if 判断,然后其它状态使用 switch 来判断,是因为绝大部分的请求都是 RECEIVED 类型。
这里的 handler 是 DecodeHandler,这是一个解码处理器。也许你会以为,这个是不是和 InternalDecoder冲突了?既然解码操作已经在 IO 线程(也就是 Netty 的 WorkerGroup)中处理了,为什么到 Dubbo 线程池中,还要再处理一次?这取决于 decode.in.io 参数,允许将部分解码工作交由 Dubbo 线程池中完成。下面我们略过 DecodeHandler,快进到 HeaderExchangeHandler 中
  1. public class HeaderExchangeHandler implements ChannelHandlerDelegate {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>public void received(Channel channel, Object message) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>channel.setAttribute(KEY_READ_TIMESTAMP, System.currentTimeMillis());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>ExchangeChannel exchangeChannel = HeaderExchangeChannel.getOrAddChannel(channel);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference>// 处理请求对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference>if (message instanceof Request) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference>// handle request.<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference>Request request = (Request) message;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference>if (request.isEvent()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference>// 处理事件<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference>handlerEvent(channel, request);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference>// 处理普通的请求<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference>} else {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference>// 双向通信<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference>if (request.isTwoWay()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  218. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  219.     <dubbo:method name="sayHello" return="false" />
  220. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  221. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  222. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  223.     <dubbo:method name="sayHello" return="false" />
  224. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  225. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  226. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  227.     <dubbo:method name="sayHello" return="false" />
  228. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  229. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  230. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  231.     <dubbo:method name="sayHello" return="false" />
  232. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  233. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  234. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  235.     <dubbo:method name="sayHello" return="false" />
  236. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  237. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  238. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  239.     <dubbo:method name="sayHello" return="false" />
  240. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  241. </dubbo:reference>// 向后调用服务,并得到调用结果<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  242. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  243.     <dubbo:method name="sayHello" return="false" />
  244. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  245. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  246. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  247.     <dubbo:method name="sayHello" return="false" />
  248. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  249. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  250. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  251.     <dubbo:method name="sayHello" return="false" />
  252. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  253. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  254. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  255.     <dubbo:method name="sayHello" return="false" />
  256. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  257. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  258. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  259.     <dubbo:method name="sayHello" return="false" />
  260. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  261. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  262. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  263.     <dubbo:method name="sayHello" return="false" />
  264. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  265. </dubbo:reference>Response response = handleRequest(exchangeChannel, request);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  266. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  267.     <dubbo:method name="sayHello" return="false" />
  268. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  269. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  270. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  271.     <dubbo:method name="sayHello" return="false" />
  272. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  273. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  274. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  275.     <dubbo:method name="sayHello" return="false" />
  276. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  277. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  278. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  279.     <dubbo:method name="sayHello" return="false" />
  280. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  281. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  282. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  283.     <dubbo:method name="sayHello" return="false" />
  284. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  285. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  286. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  287.     <dubbo:method name="sayHello" return="false" />
  288. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  289. </dubbo:reference>// 将调用结果返回给服务消费端<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  290. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  291.     <dubbo:method name="sayHello" return="false" />
  292. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  293. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  294. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  295.     <dubbo:method name="sayHello" return="false" />
  296. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  297. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  298. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  299.     <dubbo:method name="sayHello" return="false" />
  300. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  301. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  302. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  303.     <dubbo:method name="sayHello" return="false" />
  304. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  305. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  306. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  307.     <dubbo:method name="sayHello" return="false" />
  308. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  309. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  310. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  311.     <dubbo:method name="sayHello" return="false" />
  312. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  313. </dubbo:reference>channel.send(response);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  314. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  315.     <dubbo:method name="sayHello" return="false" />
  316. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  317. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  318. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  319.     <dubbo:method name="sayHello" return="false" />
  320. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  321. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  322. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  323.     <dubbo:method name="sayHello" return="false" />
  324. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  325. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  326. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  327.     <dubbo:method name="sayHello" return="false" />
  328. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  329. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  330. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  331.     <dubbo:method name="sayHello" return="false" />
  332. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  333. </dubbo:reference>} else {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  334. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  335.     <dubbo:method name="sayHello" return="false" />
  336. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  337. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  338. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  339.     <dubbo:method name="sayHello" return="false" />
  340. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  341. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  342. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  343.     <dubbo:method name="sayHello" return="false" />
  344. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  345. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  346. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  347.     <dubbo:method name="sayHello" return="false" />
  348. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  349. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  350. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  351.     <dubbo:method name="sayHello" return="false" />
  352. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  353. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  354. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  355.     <dubbo:method name="sayHello" return="false" />
  356. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  357. </dubbo:reference>// 如果是单向通信,仅向后调用指定服务即可,无需返回调用结果<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  358. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  359.     <dubbo:method name="sayHello" return="false" />
  360. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  361. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  362. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  363.     <dubbo:method name="sayHello" return="false" />
  364. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  365. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  366. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  367.     <dubbo:method name="sayHello" return="false" />
  368. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  369. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  370. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  371.     <dubbo:method name="sayHello" return="false" />
  372. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  373. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  374. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  375.     <dubbo:method name="sayHello" return="false" />
  376. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  377. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  378. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  379.     <dubbo:method name="sayHello" return="false" />
  380. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  381. </dubbo:reference>handler.received(exchangeChannel, request.getData());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  382. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  383.     <dubbo:method name="sayHello" return="false" />
  384. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  385. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  386. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  387.     <dubbo:method name="sayHello" return="false" />
  388. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  389. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  390. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  391.     <dubbo:method name="sayHello" return="false" />
  392. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  393. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  394. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  395.     <dubbo:method name="sayHello" return="false" />
  396. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  397. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  398. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  399.     <dubbo:method name="sayHello" return="false" />
  400. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  401. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  402. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  403.     <dubbo:method name="sayHello" return="false" />
  404. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  405. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  406. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  407.     <dubbo:method name="sayHello" return="false" />
  408. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  409. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  410. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  411.     <dubbo:method name="sayHello" return="false" />
  412. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  413. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  414. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  415.     <dubbo:method name="sayHello" return="false" />
  416. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  417. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  418. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  419.     <dubbo:method name="sayHello" return="false" />
  420. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  421. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  422. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  423.     <dubbo:method name="sayHello" return="false" />
  424. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  425. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  426. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  427.     <dubbo:method name="sayHello" return="false" />
  428. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  429. </dubbo:reference>// 处理响应对象,服务消费方会执行此处逻辑<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  430. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  431.     <dubbo:method name="sayHello" return="false" />
  432. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  433. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  434. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  435.     <dubbo:method name="sayHello" return="false" />
  436. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  437. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  438. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  439.     <dubbo:method name="sayHello" return="false" />
  440. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  441. </dubbo:reference>} else if (message instanceof Response) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  442. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  443.     <dubbo:method name="sayHello" return="false" />
  444. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  445. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  446. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  447.     <dubbo:method name="sayHello" return="false" />
  448. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  449. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  450. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  451.     <dubbo:method name="sayHello" return="false" />
  452. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  453. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  454. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  455.     <dubbo:method name="sayHello" return="false" />
  456. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  457. </dubbo:reference>handleResponse(channel, (Response) message);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  458. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  459.     <dubbo:method name="sayHello" return="false" />
  460. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  461. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  462. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  463.     <dubbo:method name="sayHello" return="false" />
  464. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  465. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  466. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  467.     <dubbo:method name="sayHello" return="false" />
  468. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  469. </dubbo:reference>} else if (message instanceof String) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  470. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  471.     <dubbo:method name="sayHello" return="false" />
  472. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  473. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  474. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  475.     <dubbo:method name="sayHello" return="false" />
  476. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  477. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  478. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  479.     <dubbo:method name="sayHello" return="false" />
  480. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  481. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  482. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  483.     <dubbo:method name="sayHello" return="false" />
  484. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  485. </dubbo:reference>// telnet 相关<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  486. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  487.     <dubbo:method name="sayHello" return="false" />
  488. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  489. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  490. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  491.     <dubbo:method name="sayHello" return="false" />
  492. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  493. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  494. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  495.     <dubbo:method name="sayHello" return="false" />
  496. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  497. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  498. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  499.     <dubbo:method name="sayHello" return="false" />
  500. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  501. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  502. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  503.     <dubbo:method name="sayHello" return="false" />
  504. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  505. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  506. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  507.     <dubbo:method name="sayHello" return="false" />
  508. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  509. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  510. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  511.     <dubbo:method name="sayHello" return="false" />
  512. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  513. </dubbo:reference>} else {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  514. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  515.     <dubbo:method name="sayHello" return="false" />
  516. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  517. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  518. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  519.     <dubbo:method name="sayHello" return="false" />
  520. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  521. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  522. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  523.     <dubbo:method name="sayHello" return="false" />
  524. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  525. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  526. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  527.     <dubbo:method name="sayHello" return="false" />
  528. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  529. </dubbo:reference>handler.received(exchangeChannel, message);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  530. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  531.     <dubbo:method name="sayHello" return="false" />
  532. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  533. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  534. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  535.     <dubbo:method name="sayHello" return="false" />
  536. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  537. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  538. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  539.     <dubbo:method name="sayHello" return="false" />
  540. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  541. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  542. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  543.     <dubbo:method name="sayHello" return="false" />
  544. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  545. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  546. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  547.     <dubbo:method name="sayHello" return="false" />
  548. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  549. </dubbo:reference>} finally {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  550. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  551.     <dubbo:method name="sayHello" return="false" />
  552. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  553. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  554. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  555.     <dubbo:method name="sayHello" return="false" />
  556. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  557. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  558. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  559.     <dubbo:method name="sayHello" return="false" />
  560. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  561. </dubbo:reference>HeaderExchangeChannel.removeChannelIfDisconnected(channel);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  562. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  563.     <dubbo:method name="sayHello" return="false" />
  564. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  565. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  566. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  567.     <dubbo:method name="sayHello" return="false" />
  568. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  569. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  570. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  571.     <dubbo:method name="sayHello" return="false" />
  572. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  573. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  574. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  575.     <dubbo:method name="sayHello" return="false" />
  576. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  577. </dubbo:reference>// 处理请求<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  578. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  579.     <dubbo:method name="sayHello" return="false" />
  580. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  581. </dubbo:reference>Response handleRequest(ExchangeChannel channel, Request req) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  582. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  583.     <dubbo:method name="sayHello" return="false" />
  584. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  585. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  586. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  587.     <dubbo:method name="sayHello" return="false" />
  588. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  589. </dubbo:reference>Response res = new Response(req.getId(), req.getVersion());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  590. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  591.     <dubbo:method name="sayHello" return="false" />
  592. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  593. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  594. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  595.     <dubbo:method name="sayHello" return="false" />
  596. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  597. </dubbo:reference>// 检测请求是否合法,不合法则返回状态码为 BAD_REQUEST 的响应<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  598. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  599.     <dubbo:method name="sayHello" return="false" />
  600. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  601. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  602. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  603.     <dubbo:method name="sayHello" return="false" />
  604. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  605. </dubbo:reference>if (req.isBroken()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  606. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  607.     <dubbo:method name="sayHello" return="false" />
  608. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  609. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  610. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  611.     <dubbo:method name="sayHello" return="false" />
  612. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  613. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  614. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  615.     <dubbo:method name="sayHello" return="false" />
  616. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  617. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  618. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  619.     <dubbo:method name="sayHello" return="false" />
  620. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  621. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  622. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  623.     <dubbo:method name="sayHello" return="false" />
  624. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  625. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  626. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  627.     <dubbo:method name="sayHello" return="false" />
  628. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  629. </dubbo:reference>return res;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  630. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  631.     <dubbo:method name="sayHello" return="false" />
  632. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  633. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  634. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  635.     <dubbo:method name="sayHello" return="false" />
  636. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  637. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  638. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  639.     <dubbo:method name="sayHello" return="false" />
  640. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  641. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  642. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  643.     <dubbo:method name="sayHello" return="false" />
  644. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  645. </dubbo:reference>// 获取 data 字段值,也就是 RpcInvocation 对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  646. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  647.     <dubbo:method name="sayHello" return="false" />
  648. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  649. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  650. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  651.     <dubbo:method name="sayHello" return="false" />
  652. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  653. </dubbo:reference>Object msg = req.getData();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  654. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  655.     <dubbo:method name="sayHello" return="false" />
  656. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  657. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  658. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  659.     <dubbo:method name="sayHello" return="false" />
  660. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  661. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  662. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  663.     <dubbo:method name="sayHello" return="false" />
  664. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  665. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  666. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  667.     <dubbo:method name="sayHello" return="false" />
  668. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  669. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  670. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  671.     <dubbo:method name="sayHello" return="false" />
  672. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  673. </dubbo:reference>// handle data.<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  674. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  675.     <dubbo:method name="sayHello" return="false" />
  676. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  677. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  678. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  679.     <dubbo:method name="sayHello" return="false" />
  680. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  681. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  682. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  683.     <dubbo:method name="sayHello" return="false" />
  684. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  685. </dubbo:reference>// 继续向下调用<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  686. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  687.     <dubbo:method name="sayHello" return="false" />
  688. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  689. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  690. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  691.     <dubbo:method name="sayHello" return="false" />
  692. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  693. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  694. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  695.     <dubbo:method name="sayHello" return="false" />
  696. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  697. </dubbo:reference>Object result = handler.reply(channel, msg);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  698. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  699.     <dubbo:method name="sayHello" return="false" />
  700. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  701. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  702. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  703.     <dubbo:method name="sayHello" return="false" />
  704. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  705. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  706. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  707.     <dubbo:method name="sayHello" return="false" />
  708. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  709. </dubbo:reference>// 设置 OK 状态码<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  710. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  711.     <dubbo:method name="sayHello" return="false" />
  712. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  713. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  714. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  715.     <dubbo:method name="sayHello" return="false" />
  716. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  717. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  718. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  719.     <dubbo:method name="sayHello" return="false" />
  720. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  721. </dubbo:reference>res.setStatus(Response.OK);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  722. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  723.     <dubbo:method name="sayHello" return="false" />
  724. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  725. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  726. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  727.     <dubbo:method name="sayHello" return="false" />
  728. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  729. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  730. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  731.     <dubbo:method name="sayHello" return="false" />
  732. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  733. </dubbo:reference>// 设置调用结果<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  734. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  735.     <dubbo:method name="sayHello" return="false" />
  736. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  737. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  738. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  739.     <dubbo:method name="sayHello" return="false" />
  740. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  741. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  742. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  743.     <dubbo:method name="sayHello" return="false" />
  744. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  745. </dubbo:reference>res.setResult(result);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  746. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  747.     <dubbo:method name="sayHello" return="false" />
  748. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  749. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  750. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  751.     <dubbo:method name="sayHello" return="false" />
  752. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  753. </dubbo:reference>} catch (Throwable e) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  754. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  755.     <dubbo:method name="sayHello" return="false" />
  756. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  757. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  758. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  759.     <dubbo:method name="sayHello" return="false" />
  760. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  761. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  762. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  763.     <dubbo:method name="sayHello" return="false" />
  764. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  765. </dubbo:reference>// 若调用过程出现异常,则设置 SERVICE_ERROR,表示服务端异常<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  766. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  767.     <dubbo:method name="sayHello" return="false" />
  768. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  769. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  770. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  771.     <dubbo:method name="sayHello" return="false" />
  772. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  773. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  774. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  775.     <dubbo:method name="sayHello" return="false" />
  776. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  777. </dubbo:reference>res.setStatus(Response.SERVICE_ERROR);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  778. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  779.     <dubbo:method name="sayHello" return="false" />
  780. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  781. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  782. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  783.     <dubbo:method name="sayHello" return="false" />
  784. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  785. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  786. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  787.     <dubbo:method name="sayHello" return="false" />
  788. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  789. </dubbo:reference>res.setErrorMessage(StringUtils.toString(e));<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  790. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  791.     <dubbo:method name="sayHello" return="false" />
  792. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  793. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  794. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  795.     <dubbo:method name="sayHello" return="false" />
  796. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  797. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  798. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  799.     <dubbo:method name="sayHello" return="false" />
  800. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  801. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  802. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  803.     <dubbo:method name="sayHello" return="false" />
  804. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  805. </dubbo:reference>return res;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  806. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  807.     <dubbo:method name="sayHello" return="false" />
  808. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  809. </dubbo:reference>}}
复制代码
处理过程注释中已经写了。通过 handleRequest 方法处理请求得到返回值,并通过 channel.send 将结果返回给消费者。(碎碎念:这个 channel 和 Netty 的是真的像)
handleRequest 方法中主要是对 Response 对象的处理,我们继续跟进调用过程 handler.reply(channel, msg),这个 handler 是 DubboProtocol的类变量requestHandler
  1. public class DubboProtocol extends AbstractProtocol {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>private ExchangeHandler requestHandler = new ExchangeHandlerAdapter() {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>public Object reply(ExchangeChannel channel, Object message) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference>if (message instanceof Invocation) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference>Invocation inv = (Invocation) message;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference>// 获取 Invoker 实例<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>Invoker invoker = getInvoker(channel, inv);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>// need to consider backward-compatibility if it's a callback<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference>// 回调相关<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference>if (Boolean.TRUE.toString().equals(inv.getAttachments().get(IS_CALLBACK_SERVICE_INVOKE))) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference>RpcContext.getContext().setRemoteAddress(channel.getRemoteAddress());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference>// 通过 Invoker 调用具体的服务<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference>return invoker.invoke(inv);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  218. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  219.     <dubbo:method name="sayHello" return="false" />
  220. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  221. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  222. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  223.     <dubbo:method name="sayHello" return="false" />
  224. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  225. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  226. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  227.     <dubbo:method name="sayHello" return="false" />
  228. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  229. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  230. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  231.     <dubbo:method name="sayHello" return="false" />
  232. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  233. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  234. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  235.     <dubbo:method name="sayHello" return="false" />
  236. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  237. </dubbo:reference>throw new RemotingException(channel, "...");<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  238. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  239.     <dubbo:method name="sayHello" return="false" />
  240. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  241. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  242. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  243.     <dubbo:method name="sayHello" return="false" />
  244. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  245. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  246. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  247.     <dubbo:method name="sayHello" return="false" />
  248. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  249. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  250. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  251.     <dubbo:method name="sayHello" return="false" />
  252. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  253. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  254. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  255.     <dubbo:method name="sayHello" return="false" />
  256. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  257. </dubbo:reference>};<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  258. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  259.     <dubbo:method name="sayHello" return="false" />
  260. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  261. </dubbo:reference>Invoker getInvoker(Channel channel, Invocation inv) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  262. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  263.     <dubbo:method name="sayHello" return="false" />
  264. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  265. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  266. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  267.     <dubbo:method name="sayHello" return="false" />
  268. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  269. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  270. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  271.     <dubbo:method name="sayHello" return="false" />
  272. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  273. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  274. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  275.     <dubbo:method name="sayHello" return="false" />
  276. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  277. </dubbo:reference>// 计算 service key,格式为 groupName/serviceName:serviceVersion:port。比如:<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  278. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  279.     <dubbo:method name="sayHello" return="false" />
  280. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  281. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  282. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  283.     <dubbo:method name="sayHello" return="false" />
  284. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  285. </dubbo:reference>//   dubbo/com.alibaba.dubbo.demo.DemoService:1.0.0:20880<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  286. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  287.     <dubbo:method name="sayHello" return="false" />
  288. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  289. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  290. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  291.     <dubbo:method name="sayHello" return="false" />
  292. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  293. </dubbo:reference>String serviceKey = serviceKey(port, path, inv.getAttachments().get(Constants.VERSION_KEY), inv.getAttachments().get(Constants.GROUP_KEY));<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  294. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  295.     <dubbo:method name="sayHello" return="false" />
  296. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  297. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  298. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  299.     <dubbo:method name="sayHello" return="false" />
  300. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  301. </dubbo:reference>// 从 exporterMap 查找与 serviceKey 相对应的 DubboExporter 对象,<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  302. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  303.     <dubbo:method name="sayHello" return="false" />
  304. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  305. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  306. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  307.     <dubbo:method name="sayHello" return="false" />
  308. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  309. </dubbo:reference>// 服务导出过程中会将  映射关系存储到 exporterMap 集合中<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  310. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  311.     <dubbo:method name="sayHello" return="false" />
  312. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  313. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  314. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  315.     <dubbo:method name="sayHello" return="false" />
  316. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  317. </dubbo:reference>DubboExporter exporter = (DubboExporter) exporterMap.get(serviceKey);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  318. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  319.     <dubbo:method name="sayHello" return="false" />
  320. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  321. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  322. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  323.     <dubbo:method name="sayHello" return="false" />
  324. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  325. </dubbo:reference>if (exporter == null)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  326. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  327.     <dubbo:method name="sayHello" return="false" />
  328. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  329. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  330. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  331.     <dubbo:method name="sayHello" return="false" />
  332. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  333. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  334. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  335.     <dubbo:method name="sayHello" return="false" />
  336. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  337. </dubbo:reference>throw new RemotingException(channel, "Not found exported service: " + serviceKey + " in " + exporterMap.keySet() + ", may be version or group mismatch " + ", channel: consumer: " + channel.getRemoteAddress() + " --> provider: " + channel.getLocalAddress() + ", message:" + inv);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  338. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  339.     <dubbo:method name="sayHello" return="false" />
  340. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  341. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  342. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  343.     <dubbo:method name="sayHello" return="false" />
  344. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  345. </dubbo:reference>// 获取 Invoker 对象,并返回<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  346. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  347.     <dubbo:method name="sayHello" return="false" />
  348. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  349. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  350. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  351.     <dubbo:method name="sayHello" return="false" />
  352. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  353. </dubbo:reference>return exporter.getInvoker();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  354. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  355.     <dubbo:method name="sayHello" return="false" />
  356. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  357. </dubbo:reference>}}
复制代码
reply 方法先是获取 Invoker 实例,然后通过 Invoker 调用具体的服务。想了解 Invoker 的创建以及如何放入到 exporterMap 中的,可以看以前写过的 服务导出 文章。下面这段在 服务导出 文章中均有提过,不想看的可以直接跳到本节末尾看调用路径。
invoke 方法定义在 AbstractProxyInvoker 中
  1. public abstract class AbstractProxyInvoker implements Invoker {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>public Result invoke(Invocation invocation) throws RpcException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>// 调用 doInvoke 执行后续的调用,并将调用结果封装到 RpcResult 中,并<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference>return new RpcResult(doInvoke(proxy, invocation.getMethodName(), invocation.getParameterTypes(), invocation.getArguments()));<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference>} catch (InvocationTargetException e) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>return new RpcResult(e.getTargetException());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference>} catch (Throwable e) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>throw new RpcException("Failed to invoke remote proxy method ...");<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference>protected abstract Object doInvoke(T proxy, String methodName, Class[] parameterTypes, Object[] arguments) throws Throwable;}
复制代码
doInvoke 是一个抽象方法,这个需要由具体的 Invoker 实例实现。Invoker 实例是在运行时通过 JavassistProxyFactory 创建的
  1. public class JavassistProxyFactory extends AbstractProxyFactory {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference>public  Invoker getInvoker(T proxy, Class type, URL url) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>final Wrapper wrapper = Wrapper.getWrapper(proxy.getClass().getName().indexOf('$') < 0 ? proxy.getClass() : type);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>// 创建匿名类对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>return new AbstractProxyInvoker(proxy, type, url) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference>@Override<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference>protected Object doInvoke(T proxy, String methodName,<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>  Class[] parameterTypes,<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference>  Object[] arguments) throws Throwable {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference>// 调用 invokeMethod 方法进行后续的调用<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference>return wrapper.invokeMethod(proxy, methodName, parameterTypes, arguments);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference>};<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference>}}
复制代码
Wrapper 是一个抽象类,其中 invokeMethod 是一个抽象方法。Dubbo 会在运行时通过 Javassist 框架为 Wrapper 生成实现类,并实现 invokeMethod 方法,该方法最终会根据调用信息调用具体的服务。以 DemoServiceImpl 为例,Javassist 为其生成的代理类如下。
  1. public class Wrapper0 extends Wrapper implements ClassGenerator.DC {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>// 省略其他方法<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>public Object invokeMethod(Object object, String string, Class[] arrclass, Object[] arrobject) throws InvocationTargetException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>DemoService demoService;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference>// 类型转换<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference>demoService = (DemoService)object;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference>catch (Throwable throwable) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference>throw new IllegalArgumentException(throwable);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference>// 根据方法名调用指定的方法<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference>if ("sayHello".equals(string) && arrclass.length == 1) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference>return demoService.sayHello((String)arrobject[0]);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference>catch (Throwable throwable) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference>throw new InvocationTargetException(throwable);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference>throw new NoSuchMethodException(new StringBuffer().append("Not found method "").append(string).append("" in class com.alibaba.dubbo.demo.DemoService.").toString());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference>}}
复制代码
至此,服务端调用服务的过程就讲完了。
2.3.3 调用路径

下面我们来总结一下服务端调用服务过程的调用栈(以 DemoService 为例)
  1. // 这是IO线程的调用过程NettyServerHandler#channelRead(ChannelHandlerContext, Object)  —> AbstractPeer#received(Channel, Object)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>—> MultiMessageHandler#received(Channel, Object)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>  —> HeartbeatHandler#received(Channel, Object)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>—> AllChannelHandler#received(Channel, Object)// 这是转发到线程池之后的调用过程ChannelEventRunnable#run()  —> DecodeHandler#received(Channel, Object)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>—> HeaderExchangeHandler#received(Channel, Object)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference>  —> HeaderExchangeHandler#handleRequest(ExchangeChannel, Request)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference>—> DubboProtocol.requestHandler#reply(ExchangeChannel, Object)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference>  —> Filter#invoke(Invoker, Invocation)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference>—> AbstractProxyInvoker#invoke(Invocation)<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference>  —> Wrapper0#invokeMethod(Object, String, Class[], Object[])<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>—> DemoServiceImpl#sayHello(String)
复制代码
2.4 服务提供方返回调用结果

在 2.3.2 节中讲了,调用结果会封装在 Response 对象中,并由NettyChannel 的 send 方法将 Response 对象返回。详情请看 HeaderExchangeHandler。至于返回 Response 过程中的编码过程,我们省略。
2.5 服务消费方接收调用结果

消费者接收响应数据的处理过程中,从 NettyHandler (消费者是 NettyClientHandler,生产者是 NettyServerHandler,不过他们的 channelRead 方法一模一样) 到 AllChannelHandler 的处理过程与服务提供方接收请求(2.3节)的处理过程一致,就不重复分析了。所以本节重点在 Dubbo如何将调用结果传递给用户线程。
2.5.1 向用户线程传递调用结果

我们直接快进到 HeaderExchangeHandler 的 received 方法中(调用路径请看 2.3.2 节末尾)
  1. public class HeaderExchangeHandler implements ChannelHandlerDelegate {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>public void received(Channel channel, Object message) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference>channel.setAttribute(KEY_READ_TIMESTAMP, System.currentTimeMillis());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference>ExchangeChannel exchangeChannel = HeaderExchangeChannel.getOrAddChannel(channel);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference>// 处理请求对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference>if (message instanceof Request) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>// 处理响应对象,服务消费方会执行此处逻辑<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference>} else if (message instanceof Response) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference>handleResponse(channel, (Response) message);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference>} else if (message instanceof String) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference>...<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference>} else {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference>handler.received(exchangeChannel, message);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference>} finally {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference>HeaderExchangeChannel.removeChannelIfDisconnected(channel);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference>static void handleResponse(Channel channel, Response response) throws RemotingException {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  218. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  219.     <dubbo:method name="sayHello" return="false" />
  220. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  221. </dubbo:reference>if (response != null && !response.isHeartbeat()) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  222. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  223.     <dubbo:method name="sayHello" return="false" />
  224. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  225. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  226. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  227.     <dubbo:method name="sayHello" return="false" />
  228. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  229. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  230. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  231.     <dubbo:method name="sayHello" return="false" />
  232. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  233. </dubbo:reference>DefaultFuture.received(channel, response);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  234. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  235.     <dubbo:method name="sayHello" return="false" />
  236. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  237. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  238. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  239.     <dubbo:method name="sayHello" return="false" />
  240. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  241. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  242. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  243.     <dubbo:method name="sayHello" return="false" />
  244. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  245. </dubbo:reference>}}
复制代码
可以看到,是调用 DefaultFuture#receive 方法处理的,DefaultFuture 对象我们在 2.1.3 节有讲到,继续追踪代码
  1. public class DefaultFuture implements ResponseFuture {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  2. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  3.     <dubbo:method name="sayHello" return="false" />
  4. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  5. </dubbo:reference>private static final Map FUTURES = new ConcurrentHashMap();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  6. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  7.     <dubbo:method name="sayHello" return="false" />
  8. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  9. </dubbo:reference>public static void received(Channel channel, Response response) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  10. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  11.     <dubbo:method name="sayHello" return="false" />
  12. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  13. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  14. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  15.     <dubbo:method name="sayHello" return="false" />
  16. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  17. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  18. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  19.     <dubbo:method name="sayHello" return="false" />
  20. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  21. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  22. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  23.     <dubbo:method name="sayHello" return="false" />
  24. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  25. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  26. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  27.     <dubbo:method name="sayHello" return="false" />
  28. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  29. </dubbo:reference>// 根据调用编号从 FUTURES 集合中查找指定的 DefaultFuture 对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  30. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  31.     <dubbo:method name="sayHello" return="false" />
  32. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  33. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  34. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  35.     <dubbo:method name="sayHello" return="false" />
  36. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  37. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  38. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  39.     <dubbo:method name="sayHello" return="false" />
  40. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  41. </dubbo:reference>DefaultFuture future = FUTURES.remove(response.getId());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  42. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  43.     <dubbo:method name="sayHello" return="false" />
  44. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  45. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  46. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  47.     <dubbo:method name="sayHello" return="false" />
  48. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  49. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  50. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  51.     <dubbo:method name="sayHello" return="false" />
  52. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  53. </dubbo:reference>if (future != null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  54. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  55.     <dubbo:method name="sayHello" return="false" />
  56. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  57. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  58. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  59.     <dubbo:method name="sayHello" return="false" />
  60. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  61. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  62. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  63.     <dubbo:method name="sayHello" return="false" />
  64. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  65. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  66. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  67.     <dubbo:method name="sayHello" return="false" />
  68. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  69. </dubbo:reference>future.doReceived(response);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  70. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  71.     <dubbo:method name="sayHello" return="false" />
  72. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  73. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  74. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  75.     <dubbo:method name="sayHello" return="false" />
  76. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  77. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  78. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  79.     <dubbo:method name="sayHello" return="false" />
  80. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  81. </dubbo:reference>} else {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  82. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  83.     <dubbo:method name="sayHello" return="false" />
  84. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  85. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  86. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  87.     <dubbo:method name="sayHello" return="false" />
  88. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  89. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  90. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  91.     <dubbo:method name="sayHello" return="false" />
  92. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  93. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  94. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  95.     <dubbo:method name="sayHello" return="false" />
  96. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  97. </dubbo:reference>// 这是请求超时,但是结果返回了的警告<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  98. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  99.     <dubbo:method name="sayHello" return="false" />
  100. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  101. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  102. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  103.     <dubbo:method name="sayHello" return="false" />
  104. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  105. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  106. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  107.     <dubbo:method name="sayHello" return="false" />
  108. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  109. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  110. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  111.     <dubbo:method name="sayHello" return="false" />
  112. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  113. </dubbo:reference>logger.warn("...");<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  114. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  115.     <dubbo:method name="sayHello" return="false" />
  116. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  117. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  118. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  119.     <dubbo:method name="sayHello" return="false" />
  120. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  121. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  122. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  123.     <dubbo:method name="sayHello" return="false" />
  124. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  125. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  126. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  127.     <dubbo:method name="sayHello" return="false" />
  128. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  129. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  130. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  131.     <dubbo:method name="sayHello" return="false" />
  132. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  133. </dubbo:reference>} finally {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  134. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  135.     <dubbo:method name="sayHello" return="false" />
  136. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  137. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  138. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  139.     <dubbo:method name="sayHello" return="false" />
  140. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  141. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  142. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  143.     <dubbo:method name="sayHello" return="false" />
  144. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  145. </dubbo:reference>CHANNELS.remove(response.getId());<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  146. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  147.     <dubbo:method name="sayHello" return="false" />
  148. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  149. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  150. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  151.     <dubbo:method name="sayHello" return="false" />
  152. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  153. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  154. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  155.     <dubbo:method name="sayHello" return="false" />
  156. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  157. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  158. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  159.     <dubbo:method name="sayHello" return="false" />
  160. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  161. </dubbo:reference>private void doReceived(Response res) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  162. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  163.     <dubbo:method name="sayHello" return="false" />
  164. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  165. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  166. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  167.     <dubbo:method name="sayHello" return="false" />
  168. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  169. </dubbo:reference>lock.lock();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  170. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  171.     <dubbo:method name="sayHello" return="false" />
  172. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  173. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  174. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  175.     <dubbo:method name="sayHello" return="false" />
  176. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  177. </dubbo:reference>try {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  178. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  179.     <dubbo:method name="sayHello" return="false" />
  180. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  181. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  182. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  183.     <dubbo:method name="sayHello" return="false" />
  184. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  185. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  186. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  187.     <dubbo:method name="sayHello" return="false" />
  188. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  189. </dubbo:reference>// 保存响应对象<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  190. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  191.     <dubbo:method name="sayHello" return="false" />
  192. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  193. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  194. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  195.     <dubbo:method name="sayHello" return="false" />
  196. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  197. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  198. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  199.     <dubbo:method name="sayHello" return="false" />
  200. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  201. </dubbo:reference>response = res;<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  202. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  203.     <dubbo:method name="sayHello" return="false" />
  204. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  205. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  206. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  207.     <dubbo:method name="sayHello" return="false" />
  208. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  209. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  210. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  211.     <dubbo:method name="sayHello" return="false" />
  212. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  213. </dubbo:reference>if (done != null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  214. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  215.     <dubbo:method name="sayHello" return="false" />
  216. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  217. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  218. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  219.     <dubbo:method name="sayHello" return="false" />
  220. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  221. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  222. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  223.     <dubbo:method name="sayHello" return="false" />
  224. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  225. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  226. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  227.     <dubbo:method name="sayHello" return="false" />
  228. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  229. </dubbo:reference>// 唤醒用户线程<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  230. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  231.     <dubbo:method name="sayHello" return="false" />
  232. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  233. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  234. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  235.     <dubbo:method name="sayHello" return="false" />
  236. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  237. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  238. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  239.     <dubbo:method name="sayHello" return="false" />
  240. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  241. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  242. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  243.     <dubbo:method name="sayHello" return="false" />
  244. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  245. </dubbo:reference>done.signal();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  246. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  247.     <dubbo:method name="sayHello" return="false" />
  248. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  249. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  250. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  251.     <dubbo:method name="sayHello" return="false" />
  252. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  253. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  254. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  255.     <dubbo:method name="sayHello" return="false" />
  256. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  257. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  258. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  259.     <dubbo:method name="sayHello" return="false" />
  260. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  261. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  262. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  263.     <dubbo:method name="sayHello" return="false" />
  264. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  265. </dubbo:reference>} finally {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  266. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  267.     <dubbo:method name="sayHello" return="false" />
  268. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  269. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  270. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  271.     <dubbo:method name="sayHello" return="false" />
  272. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  273. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  274. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  275.     <dubbo:method name="sayHello" return="false" />
  276. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  277. </dubbo:reference>lock.unlock();<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  278. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  279.     <dubbo:method name="sayHello" return="false" />
  280. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  281. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  282. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  283.     <dubbo:method name="sayHello" return="false" />
  284. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  285. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  286. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  287.     <dubbo:method name="sayHello" return="false" />
  288. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  289. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  290. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  291.     <dubbo:method name="sayHello" return="false" />
  292. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  293. </dubbo:reference>if (callback != null) {<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  294. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  295.     <dubbo:method name="sayHello" return="false" />
  296. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  297. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  298. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  299.     <dubbo:method name="sayHello" return="false" />
  300. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  301. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  302. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  303.     <dubbo:method name="sayHello" return="false" />
  304. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  305. </dubbo:reference>invokeCallback(callback);<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  306. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  307.     <dubbo:method name="sayHello" return="false" />
  308. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  309. </dubbo:reference><dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  310. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  311.     <dubbo:method name="sayHello" return="false" />
  312. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  313. </dubbo:reference>}<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  314. <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
  315.     <dubbo:method name="sayHello" return="false" />
  316. </dubbo:reference><dubbo:method name="sayHello" async="true" />
  317. </dubbo:reference>}}
复制代码
在一次调用过程中,请求和相应的编号是一致的,所以可以根据调用编号从 FUTURES 中得到发起请求时创建的 DefaultFuture 。DefaultFuture.get 方法阻塞等待响应结果,而 DefaultFuture#received 是得到响应结果之后唤醒用户线程(也就是 get 方法中的循环)。这两个方法结合起来看就明白了。
3. 总结

没啥好总结的,Dubbo 系列就写完了。阅读优秀框架的源码从大的方面可以学习其思想以及架构,小的方面就是一个个小功能的写法,比如负载均衡算法、DefaultFuture、SPI 等等。
PS:总感觉 Dubbo 和 Netty 的线程模型殊途同归
参考资料
Dubbo开发指南

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表