spiring异步方法@Async和消息队列rocketMQ使用哪个比较好?

本文探讨了在分布式项目中,使用Spring的@Async异步方法与RocketMQ消息队列之间的选择。@Async适用于简单的单机服务,但可能导致线程开销过大,而RocketMQ则提供更好的解耦和异步处理能力,更适合分布式环境。通过对比,文章建议在需要大量数据交互和解耦需求的场景下,选择RocketMQ进行消息异步处理。
摘要由CSDN通过智能技术生成

 背景:

因为项目是分布式项目,已经集成过rocketmq.但是没有单独将消息服务提取出来.而是每个model之间相互进行消息发布与消费.

这样解耦性比较差.且仍需要model与model之间进行服务的调用..还是多多少少会影响服务器的性能.

所以考虑将消息服务提取出来.单独建一个model.进行专门的管理rocketmq的消费.这样虽然也需要其他model进行调用rocketmq.但是与原有model项目进行了隔离...只需要利用rocketmq的异步消息在消息服务中进行各个model的调用....做到对rocketmq的消费者影响最小.解耦提高.

这里解释下为什么要使用rocketmq而不使用springboot的@async异步多线程处理.这里讲一下spring异步方法的理解.

 

Spring中用@Async注解标记的方法,称为异步方法,它会在调用方的当前线程之外的独立的线程中执行,其实就相当于我们自己new Thread(()-> System.out.println("hello world !"))这样在另一个线程中去执行相应的业务逻辑

优点:适合单机服务.使用简单只需要加一个注解@async.即可实现异步操作.  (这里使用@async注解的方法不能跟调用者的方法在一个类里面.不然会造成不生效.可以理解为一个类就是一个线程池,调用者的方法就是一个线程,这里需要单独开一个线程去调用.)

缺点:适合单机服务.不适合分布式项目,本着解耦的目的.此种方式可以酌情使用.但是对于那种数据交互比较多的方法.不建议使用,因为会造成线程开销问题.线程开销请参考:springboot-@Async默认线程池导致OOM问题    所以,如果使用过多的线程异步,会成造成oom的风险.    但是也不是不可以使用了.请参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值