乐趣区

关于java:使用消息队列MQ的-10-个理由

过来几年中,咱们始终在应用、构建和宣传音讯队列,咱们认为它们是很令人敬畏的,这也不是什么机密。

咱们置信对任何架构或利用来说,音讯队列都是一个至关重要的组件,上面是十个理由:

1、解耦

在我的项目启动之初来预测未来我的项目会碰到什么需要,是极其艰难的。音讯队列在处理过程两头插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这容许你独立的扩大或批改两边的处理过程,只有确保它们恪守同样的接口束缚。

2、冗余

有时在解决数据的时候处理过程会失败。除非数据被长久化,否则将永远失落。音讯队列把数据进行长久化直到它们曾经被齐全解决,通过这一形式躲避了数据失落危险。在被许多音讯队列所采纳的 ” 插入 - 获取 - 删除 ” 范式中,在把一个音讯从队列中删除之前,须要你的处理过程明确的指出该音讯曾经被处理完毕,确保你的数据被平安的保留直到你应用结束。

3、扩展性

因为音讯队列解耦了你的处理过程,所以增大音讯入队和解决的频率是很容易的;只有另外减少处理过程即可。不须要扭转代码、不须要调节参数。扩大就像调大电力按钮一样简略。

4、灵活性 & 峰值解决能力

当你的利用上了 Hacker News 的首页,你将发现拜访流量攀升到一个不同寻常的程度。在访问量剧增的状况下,你的利用依然须要持续发挥作用,然而这样的突发流量并不常见;如果为以能解决这类峰值拜访为规范来投入资源随时待命无疑是微小的节约。应用音讯队列可能使要害组件顶住增长的拜访压力,而不是因为超出负荷的申请而齐全解体。请查看咱们对于峰值解决能力的博客文章理解更多此方面的信息。

5、可恢复性

当体系的一部分组件生效,不会影响到整个零碎。音讯队列升高了过程间的耦合度,所以即便一个解决音讯的过程挂掉,退出队列中的音讯依然能够在零碎复原后被解决。而这种容许重试或者延后解决申请的能力通常是造就一个略感不便的用户和一个丧气透顶的用户之间的区别。

6、送达保障

音讯队列提供的冗余机制保障了音讯能被理论的解决,只有一个过程读取了该队列即可。在此基础上,IronMQ 提供了一个 ” 只送达一次 ” 保障。无论有多少过程在从队列中支付数据,每一个音讯只能被解决一次。这之所以成为可能,是因为获取一个音讯只是 ” 预约 ” 了这个音讯,临时把它移出了队列。除非客户端明确的示意曾经解决完了这个音讯,否则这个音讯会被放回队列中去,在一段可配置的工夫之后可再次被解决。

7、排序保障

在许多状况下,数据处理的程序都很重要。音讯队列原本就是排序的,并且能保证数据会依照特定的程序来解决。IronMO 保障音讯浆糊通过 FIFO(先进先出)的程序来解决,因而音讯在队列中的地位就是从队列中检索他们的地位。

8、缓冲

在任何重要的零碎中,都会有须要不同的解决工夫的元素。例如, 加载一张图片比利用过滤器破费更少的工夫。音讯队列通过一个缓冲层来帮忙工作最高效率的执行 – 写入队列的解决会尽可能的疾速,而不受从队列读的准备解决的束缚。该缓冲有助于管制和优化数据流通过零碎的速度。

9、了解数据流

在一个分布式系统里,要失去一个对于用户操作会用多长时间及其起因的总体印象,是个微小的挑战。音讯系列通过音讯被解决的频率,来不便的辅助确定那些体现不佳的处理过程或畛域,这些中央的数据流都不够优化。

10、异步通信

很多时候,你不想也不须要立刻解决音讯。音讯队列提供了异步解决机制,容许你把一个音讯放入队列,但并不立刻解决它。你想向队列中放入多少音讯就放多少,而后在你乐意的时候再去解决它们。

咱们置信上述十个起因,使得音讯队列成为在过程或利用之间进行通信的最好模式。

原文出自:http://blog.iron.io/\
译文:https://www.oschina.net/trans…
翻译 : lwei, Garfielt, YuanyuanL, wang7x

近期热文举荐:

1.600+ 道 Java 面试题及答案整顿 (2021 最新版)

2. 终于靠开源我的项目弄到 IntelliJ IDEA 激活码了,真香!

3. 阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!

4.Spring Cloud 2020.0.0 正式公布,全新颠覆性版本!

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

退出移动版