Spring4为我们提供了@Async注解,我们还需要消息中间件作异步消息处理吗?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

Spring4为我们提供了@Async注解,我们还需要消息中间件作异步消息处理吗?

a123456678 2016-03-19 10:58:10 3338

我们一般会用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()方法的调用返回值没有影响,完全可以异步处理 
}
消息中间件 Kafka
分享到
取消 提交回答
全部回答(3)
  • hill007300
    2019-07-17 19:07:40

    消息中间件提供的是可靠的异步消息通知,侧重于分布式场景,和@Async所解决的问题是两回事

    0 0
  • ansel.q
    2019-07-17 19:07:40

    @Async 解决的问题是我们一般使用新开线程执行的异步操作。
    而你使用消息队列的异步主要是系统直接解耦使用。
    如果你非要把消息队列当做一个异步执行的组件,那么他最大的好处应该就是可以分布式执行异步任务。
    试想如果你的b()方法如果需要在另一台机器上执行那么你用@Async这个注解就不行了!

    0 0
  • a123456678
    2019-07-17 19:07:40

    消息中间件的作用更多的是解耦服务和异步执行问题不是很大吧? 消息中间件很多时候是不关心相应操作会触发什么结果的。

    例如:

    更新了一个商品信息, 这个时候,要post一个消息到消息队列

    可能操作如下:

    1. 更新价格信息中价格信息
    2. 更新进销存系统产品信息
    3. 更新索引信息
    0 0
添加回答
微服务
使用钉钉扫一扫加入圈子
+ 订阅

构建可靠、高效、易扩展的技术基石

推荐文章
相似问题