博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dubbo学习笔记四(异步调用)
阅读量:5967 次
发布时间:2019-06-19

本文共 3034 字,大约阅读时间需要 10 分钟。

相关资料

项目结构

1226359-20190513161311458-154839777.png

代码示例

  • [EchoTestApp]
@RestController@SpringBootApplication@ImportResource("classpath:/consumer.xml")public class EchoTestApp {    @Autowired    private ClientService clientService;    @GetMapping("/hi/{name}")    public String hello(@PathVariable(name = "name") String name) throws InterruptedException, ExecutionException, TimeoutException {        return clientService.echo(name);    }    public static void main(String[] args) {        System.getProperties().put("server.port", 7070);        SpringApplication.run(EchoTestApp.class, args);    }    @Configuration    @EnableDubbo(scanBasePackages = "consumer")    @PropertySource("classpath:/dubbo-consumer.properties")    static public class ConsumerConfiguration {    }}

和之前的区别在于 @ImportResource("classpath:/consumer.xml") 引入dubbo的xml配置

至于为什么用xml呢?因为没有找到 dubbo 事件通知 api 的参考示例

  • [consumer.xml]
  • [dubbo-consumer.properties] 注释掉里面的所有配置,应为不能和上面的重复

  • [ClientService] 注释掉里面的重复配置

package com.xh.dubbo.learn.lesson2.service;import com.xh.dubbo.learn.lesson2.api.IEchoService;import org.apache.dubbo.rpc.RpcContext;import java.util.concurrent.ExecutionException;import java.util.concurrent.Future;import java.util.concurrent.TimeUnit;import java.util.concurrent.TimeoutException;/*@Service*/public class ClientService {    /**     * xml和注解不能同时定义     */    /* @Reference*/    private IEchoService echoService;    public String echo(String msg) throws ExecutionException, InterruptedException, TimeoutException {        String result = echoService.echo(msg);// 这里的返回值为空,请不要使用        Future
future = RpcContext.getContext().getFuture(); // 业务线程可以开始做其他事情 System.out.println("start do other thing..."); //Thread.sleep(100); System.out.println("print result:" + result); System.out.println("other thing is done"); result = future.get(3000, TimeUnit.MILLISECONDS); // 阻塞需要获取异步结果时,也可以使用 get(timeout, unit) 设置超时时间 return result == null ? "error result" : result; } public IEchoService getEchoService() { return echoService; } public void setEchoService(IEchoService echoService) { this.echoService = echoService; }}
  • [INotify]
public interface INotify {    void onReturn(String returnStr, String arg);    void onThrow(Throwable ex, String arg);}
  • [NotifyImpl]
@Component("notify")public class NotifyImpl implements INotify {    public void onReturn(String returnStr, String arg) {        System.out.println("do something onReturn");        System.out.println(returnStr);        System.out.println(arg);    }    public void onThrow(Throwable ex, String arg) {        System.out.println("do something onThrow");        System.out.println(ex.getMessage());        System.out.println(arg);    }}

需要注意的是以上方法的参数的类型和个数需要和配置文件中的比如 notify.onReturn 一致,只是前面多了返回值或者异常

输出

控制台

start do other thing...

print result:null
other thing is done
do something onReturn
echo: 哈哈哈
哈哈哈

浏览器

1226359-20190513162452517-133383413.png

转载于:https://www.cnblogs.com/lanqie/p/10833772.html

你可能感兴趣的文章
一个简单好用的日志框架NLog
查看>>
超级硬盘数据恢复软件 4.6.5.0注冊码破解版
查看>>
一款基于jquery和css3实现的摩天轮式分享按钮
查看>>
Android创建启动画面
查看>>
Linux中date命令的各种实用方法--转载
查看>>
iOS: 为画板App增加 Undo/Redo(撤销/重做)操作
查看>>
<<APUE>> 线程的分离状态
查看>>
Hive创建外部表以及分区
查看>>
设置SVN忽略文件和文件夹(文件夹)
查看>>
IT项目管理-----给年轻工程师的十大忠告
查看>>
mysqld -install命令时出现install/remove of the service denied错误的原因和解决办法
查看>>
玩家游戏状态
查看>>
Android 小技巧-- TextView与EditText 同步显示
查看>>
苹果企业版帐号申请记录
查看>>
C++ Error: error LNK2019: unresolved external symbol
查看>>
Bitmap 和Drawable 的区别
查看>>
Java操作mongoDB2.6的常见API使用方法
查看>>
信息熵(Entropy)究竟是用来衡量什么的?
查看>>
如何给服务器设置邮件警报。
查看>>
iOS 数据库操作(使用FMDB)
查看>>