2009-04-08 46 views
1

有人可以提供一些关于何时使用消息队列的经验法则以及他们应该解决哪些实际的实际问题?关于消息/消息队列的经验法则

谢谢

+0

也许可以使用以下期刊文章中提供的简单排队规则:http://puslit2.petra.ac.id/ejournal/index.php/civ/article/view/18524 – chugeluang 2013-09-30 00:14:35

回答

5

异步消息传递允许系统以断开的方式进行通信。两个系统都没有必要同时用于完成工作。

还有其他的好处。消息通常提供(有时是无意的)调节机制。这样可以防止接收系统在许多请求都同时进入的情况下变得不堪重负。

许多消息传递系统还提供持久性和可靠性设施,即使消息传递平台或接收系统崩溃,也能保证消息最终将被传递。

消息队列还提供了一个间接层。将消息放入队列的系统不一定知道谁(如果有的话)正在接收消息。接收者可以以微妙或激烈的方式改变,而不会影响发送者。这样的松耦合通常是可取的。

许多消息传递解决方案也可以参与交易。这确保系统既可以接收消息,也可以更新数据库作为响应,并且知道两者都不成功。如有必要,收到消息可以“回滚”并在发生问题时重试。

1

消息队列提供可靠的消息。他们确保消息不会完全丢失。它们仍然可能被延迟/发送到死信息队列等,但它们永远不会从系统中完全消失 - 即使它始终停留在始发客户端上,除非它被明确删除,否则始终会有某个副本存在于某个位置。

消息队列应该在丢失消息会对业务造成危害和/或导致系统不稳定的情况下使用。使用它们会产生开销,所以只能在业务需求决定时才实施。

在实施它们的情况下,应该设置某种监视过程来检查冻结的消息(由于服务停止,消息格式不正确等而无法处理的消息)。 )并适当地处理它们。

+0

可靠的消息传递是只是消息传递实现可能提供或不提供的功能。消息的异步性质是其应用程序背后的推动力量。 – topchef 2009-04-08 13:45:25

2

当您需要异步但有保证的方式来处理分层环境中的无状态,面向服务的请求时。

1

消息队列对实现负载均衡很有用。例如,服务器收到“作业”消息(订单,状态消息...)并将它们分发给所有侦听客户端。

消息队列保证消息将被传送到一个客户端。

如果客户端运行在不同的计算机上,则总负载将分配,并且在需要时将其他客户端轻松地引导到消息负载,客户端只需连接到队列并将接收(某些)消息。

编辑:

也是有好处的系统(异步地)之间移动的物体。如果它们以独立于平台的格式(JSON,XML)进行序列化,则甚至可以在不同的编程语言之间交换该对象。