我们一般会用rabbitmq或者kafka作异常消息处理,但是今天看到spring4中有个@Async注解,作用就是异步调用,如果是这样的话我们还需要用消息中间件吗?
代码如下:
public String method(){
String result = a();
// 现状:发送kafka事件,在kafka的consumer中处理b方法的内容
sendEvent();
// 问题:能不能把sendEvent方法删除,直接把b()方法放到这里来??
// b();
return result;
}
@Async
public void b(){
... ...
// 这个方法相对比较耗时,并且对method()方法的调用返回值没有影响,完全可以异步处理
}
@Async 解决的问题是我们一般使用新开线程执行的异步操作。
而你使用消息队列的异步主要是系统直接解耦使用。
如果你非要把消息队列当做一个异步执行的组件,那么他最大的好处应该就是可以分布式执行异步任务。
试想如果你的b()方法如果需要在另一台机器上执行那么你用@Async这个注解就不行了!
消息中间件的作用更多的是解耦服务和异步执行问题不是很大吧? 消息中间件很多时候是不关心相应操作会触发什么结果的。
例如:
更新了一个商品信息, 这个时候,要post一个消息到消息队列
可能操作如下:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。