何时使用像RabbitMQ这样的高级消息队列协议?[关闭]


Answers:


25

假设您有一个Web服务,每秒可以接受许多请求。您还有一个记帐系统,它可以执行很多操作,其中之一是处理来自Web服务的请求。

如果您在Web服务和记帐系统之间放置一个队列,则可以:

  • 这两个应用程序之间的耦合较少,因为现在两个应用程序都必须知道队列管理系统的配置参数和队列名称。这里的问题是,通常您将某些应用程序转移到另一台服务器上而不是移动队列管理系统
  • 如果您在短时间内收到大量请求,会计系统将始终能够处理这些请求
  • 如果数量真的很大,则坚持一些要求

当然,您可能会遇到更复杂的情况,其中您的应用程序数量远远大于两个,并且需要管理它们之间的通信。


1
1)A与B耦合要比A与C耦合和C与B耦合好吗?
查理

2)为什么不将队列放入会计系统?为什么要引入需要其他配置的新的移动黑匣子部件?
查理

2
关于问题1的@Charlie,我已经修改了答案。关于问题2,将队列放入会计系统到底意味着什么?您要使用队列数据结构吗?在这种情况下,您将需要编写更多代码来保留它。您要使用数据库表模拟队列吗?同样,您将不得不编写一些好的代码来管理该表。我没有想到的其他事情吗?
ВиталийОлегович

我为1弄错了。如果将队列放置在Web服务中或将队列放置在应用程序中,则将保留一个耦合。但是,如果队列在这两者的外部,则您现在有两倍的耦合,并且要管理的系统/故障点多50%。如果选择了第三方队列,您还将拥有此新程序包以了解和配置,并且可能会被无用的无数功能所困扰,这些功能是为了使队列通用而添加的,对于比您自己的情况多得多。
查理

@Charlie,可能会在多个系统中使用单个消息代理。否则将有一个单一的代理代理。(在我们的案例中,我们使用的是一个消息传递设备,该设备每秒可以处理所有系统的数百万条消息)。实际上,这会产生更大的解耦,因为消息是由一个系统生成的,并且任何感兴趣的系统都可以接收该消息并执行适当的逻辑。唯一的耦合是队列本身。
迈克尔·布朗

16

除了在Web服务和另一个后端服务之间提供缓冲区外,消息队列还可用于更高级的方案。Rabbit MQ(以及其他成熟的Message Queue产品,也称为MOM-面向消息的中间件)可以配置为根据不同的规则路由和分发消息。

例如,Pub-Sub路由技术允许单个源发送消息,并有许多侦听器接收该消息。股票交易软件通常使用它来保持用户的最新状态。

同样,由于大多数MOM都具有针对多种语言和平台的SDK,因此可以将它们用于集成在不同平台上编写的应用程序。

这些只是MOM启用的一些方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.