开发者社区 > 云原生 > 中间件 > 正文

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

我们一般会用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()方法的调用返回值没有影响,完全可以异步处理 
}

展开
收起
a123456678 2016-03-19 10:58:10 5303 0
3 条回答
写回答
取消 提交回答
  • 消息中间件提供的是可靠的异步消息通知,侧重于分布式场景,和@Async所解决的问题是两回事

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

    2019-07-17 19:07:40
    赞同 展开评论 打赏
  • 消息中间件的作用更多的是解耦服务和异步执行问题不是很大吧? 消息中间件很多时候是不关心相应操作会触发什么结果的。

    例如:

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

    可能操作如下:

    1. 更新价格信息中价格信息
    2. 更新进销存系统产品信息
    3. 更新索引信息
    2019-07-17 19:07:40
    赞同 展开评论 打赏

为企业提供高效、稳定、易扩展的中间件产品。

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载