背景:
因为项目是分布式项目,已经集成过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的风险. 但是也不是不可以使用了.请参考
今天的文章 spiring异步方法@Async和消息队列rocketMQ使用哪个比较好?分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/85262.html