大家好。我叫云学文。点击右上角“关注”,分享Java程序员日常需要掌握的知识点。
北京凌晨4 点
我记得很多年前就想过MQ是用来异步处理的,但是由于我是使用Spring Cloud来运行微服务,所以不能使用springboot提供的asycn注解也可以。async,这个async方法和mq有什么区别呢,为什么我不能用Springboot提供的async方法来替换mq呢?
1、MQ生产者和消费者分离,允许一个生产者发送的消息被多个消费者使用。 springboot提供的async需要耦合生产者和消费者,这样一个生产者无法服务多个消费者。
2、springboot提供的异步方法原理是,让调用服务异步会阻塞大量线程,影响系统吞吐量。异步的方式就是创建一个新的线程。一是为了提高系统吞吐量,这显然与最初的目的相矛盾。
3. MQ是跨语言的。生产者和消费者可以用不同的语言实现,这给了你灵活性,但是springboot不具备这个优势。
基于以上三个问题,如果我不使用mq,还有其他的解决方案吗?创建一个新的服务,并在这个服务内维护一个队列,生产者在发送消息时调用这个服务,很简单。当您将消息添加到队列时,使用者也会注册该消息以使用此服务进行消费。这样就实现了一个简单的消息队列,非常简单粗暴,不过好像常用的MQ中间件都是基于这个原理的。吞吐量、减少延迟、确保不丢失数据等等。我没有仔细看过mq源码,但是底层核心应该是一样的。其实,如果你把核心原理研究透了,无论你的框架多么花哨,也只是幌子。
过往亮点:
掌握程序员技术体系文章
ThreadLocal优化方案
关于作者:
云学文,一位经验丰富的Java开发工程师,在业余时间利用今日头条分享技术知识点以及对技术的理解,帮助对未来感到困惑的程序员进行技术提升。结识志同道合的朋友,互相提高,共同进步。
版权声明:本文转载于今日头条,版权归作者所有。如有侵权,请联系本站编辑删除。