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

  1. 我们一般会用rabbitmq或者kafka作异常消息处理,但是今天看到spring4中有个@Async注解,作用就是异步调用,如果是这样的话我们还需要用消息中间件吗?

  2. 代码如下:

public String method(){
    String result = a();
    
    // 现状:发送kafka事件,在kafka的consumer中处理b方法的内容
    sendEvent();
    
    // 问题:能不能把sendEvent方法删除,直接把b()方法放到这里来??
    // b();

    return result;
}

@Async
public void b(){
    ... ...
    // 这个方法相对比较耗时,并且对method()方法的调用返回值没有影响,完全可以异步处理
}
阅读 5.3k
2 个回答

消息中间件的使用不是简单为了异步调用方法,主要是为了解耦,构建分布式系统。
如果只是为了异步调用某个方法的话,多线程就够了。@Async注解等价于在另外一个线程里执行方法。
按你的场景的话确实不需要消息中间件,使用@Async注解就可以了。

MQ的三大功能:削峰,异步,解耦
只要求异步并且流量不大的话,@Async也可以,但要注意Spring自身异步的坑

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题