dubbo异步调用三种方式

来源:互联网 发布:智慧商贸源码 编辑:程序博客网 时间:2024/06/06 01:37

异步通讯对于服务端响应时间较长的方法是必须的,能够有效地利用客户端的资源,在dubbo中,消费端<dubbp:method>通过 async="true"标识。

<dubbo:reference id="xxx" ....>

    <dubbo:method name="method1" async="true" />

</dubbo:reference>

具体有三种方式:

1、NIO future主动获取结果,返回结果放在RpcContext中

     需要注意的是,由于RpcContext是单例模式,所以每次调用完后,需要保存一个Future实例;如:

      fooService.findFoo(fooId);
      Future<Foo> fooFuture = RpcContext.getContext().getFuture();
      barService.findBar(barId);
      Future<Bar> barFuture = RpcContext.getContext().getFuture();
      barService.findBar(barId);
      Bar bar = barFuture.get();

2、通过回调(Callback)参数

      Callback并不是dubbo内部类或接口,而是由应用自定义的、实现了Serializable的接口;

      分两步:1)服务提供者需在方法中声明Callback参数,其后在Service实现中显示地调用Callback的方法;

      <dubbo:service ..>
         <dubbo:method name="method1">
            <dubbo:argument index="1" callback="true" />  #标识第二个参数是callback类型
         </dubbo:method>
      </dubbo:service>

      2)Callback接口的实现类在消费端,当方法发生调用时,消费端会自动export一个Callback服务,在Rpc调用完成后,不能立即结束线程。

      <dubbo:reference ...>
         <dubbo:method name="method1" async="true">
      </dubbo:reference>

3、事件通知(推荐)

     这种方式更简单,对服务提供方来讲是透明的,包括配置和代码上,均无需做任何改动。

     消费端定义一个“通知者”的Spring Bean,指定方法的onreturn和onthrow事件action就可以。
      <bean id="notify" class="com.alibaba.dubbo.callback.implicit.NofifyImpl" />
      <dubbo:reference >
<dubbo:method name="method1" async="true" onreturn="notify.onreturn" onthrow="notify.onthrow" />
      </dubbo:reference>

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 公顷与平方千米 1平方千米等于公顷 1平方千米等于多少公顷 一平方千米等于多少公顷 1平方米等于多少公顷 5平方千米等于多少公顷 一平方米等于多少公顷 10平方千米等于多少公顷 4平方千米等于多少公顷 2平方千米等于多少公顷 3平方千米等于多少公顷 12平方千米等于多少公顷 一平方公里等于多少公顷 10000平方米等于多少公顷 帝王公侯风录 玄风鹦鹉怎么分公母 帝王公侯y风录txt下载 大唐秦国公 风尸 白公馆 思南公馆 白公馆简介 重庆白公馆 公馆 白公馆旅游 汪公馆 融创融公馆 盛世公馆 杜公馆 八号公馆 万达公馆 茉莉公馆 翡翠公馆 深圳湾公馆 拉菲公馆 一号公馆 白公馆门票 鲁能公馆 大公馆 远洋公馆 香缇公馆 中建大公馆