有人可以提供一些关于何时使用消息队列的经验法则以及它们应该解决的实际问题吗?
由于
答案 0 :(得分:5)
异步消息传递允许系统以断开连接的方式进行通信。两个系统无需同时可用于完成工作。
还有其他好处。通常,消息传递提供(有时是无意的)限制机制。如果许多请求都同时进入,这可以防止接收系统不堪重负。
许多消息传递系统还提供持久性和可靠性工具,即使消息传递平台或接收系统崩溃,也能最终传递消息。
消息队列还提供了一个间接层。将消息放入队列的系统不一定知道谁(如果有人)正在接收消息。接收者可以以微妙或激烈的方式改变,而不会影响发送者。像这样的松耦合通常是可取的。
许多消息传递解决方案也可以参与交易。这确保了系统既可以接收消息又可以响应更新数据库,并且知道两者都成功或者都不成功。如有必要,可以“回滚”收到消息,并在出现问题时重试。
答案 1 :(得分:2)
当您需要一种异步但有保证的方法来处理分层环境中的无状态,面向服务的请求时。
答案 2 :(得分:1)
消息队列提供可靠的消息传递。它们确保消息不会完全丢失。它们仍然可以被延迟/发送到死信息队列等,但它们永远不会从系统中完全消失 - 即使它被卡在原始客户端上,也总会有某个副本,除非它被明确删除。 / p>
消息队列应该用于丢失消息对业务有害和/或导致系统不稳定的情况。使用它们有一些开销,因此只有在业务需求要求时才能实现它们。
在实施它们的情况下,应该有某种监控过程来检查冻结的消息(因服务中断而无法处理的消息,消息格式不正确等)并适当地处理它们。
答案 3 :(得分:1)
消息队列对于实现负载平衡很有用。例如,服务器接收“作业”消息(订单,状态消息......)并将它们分发给所有侦听客户端。
消息队列保证将消息传递给一个客户端。
如果客户端在不同的计算机上运行,则总负载将被分配,并且在必要时很容易将另一个客户端抛向消息加载,客户端只需连接到队列并将接收(某些)消息。
编辑:
也适合在系统之间移动对象(异步)。如果它们以独立于平台的格式(JSON,XML)进行序列化,则可以在不同的编程语言之间交换对象。