代码之家  ›  专栏  ›  技术社区  ›  NoCarrier

有关消息/消息队列的经验规则[关闭]

  •  1
  • NoCarrier  · 技术社区  · 17 年前

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

    谢谢

    4 回复  |  直到 11 年前
        1
  •  5
  •   Jeremy    17 年前

    异步消息传递允许系统以断开连接的方式进行通信。这两个系统不需要同时可用来完成工作。

    还有其他好处。消息传递通常提供(有时是无意的)节流机制。如果许多请求同时出现,这将防止接收系统变得不堪重负。

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

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

    许多消息传递解决方案也可以参与事务。这样可以确保系统既可以接收消息,也可以更新响应中的数据库,并且知道两者都成功或都不成功。如有必要,可以“回滚”接收消息,并在出现问题时重试。

        2
  •  2
  •   Glenn    17 年前

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

        3
  •  1
  •   Guy Starbuck    17 年前

    消息队列提供可靠的消息传递。它们确保消息不会完全丢失。它们仍然可以被延迟/发送到死掉的消息队列等,但是它们永远不会从系统中完全消失——除非被明确删除,否则在某个地方总会有一个副本,即使它被卡在原始客户机上。

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

    在实现这些消息的情况下,应该有某种监视过程来检查冻结的消息(由于服务关闭而无法处理的消息、消息格式不正确等),并对其进行适当的处理。

        4
  •  1
  •   mjn anonym    17 年前

    消息队列对于实现负载平衡很有用。例如,服务器接收“作业”消息(订单、状态消息…)并将其分发给所有侦听客户机。

    消息队列保证消息将恰好传递到一个客户机。

    如果客户机在不同的计算机上运行,那么总负载将被分配,并且在必要时很容易将另一个客户机抛出到消息负载中,客户机只需连接到队列并接收(部分)消息。

    编辑:

    也适用于在系统之间移动对象(异步)。如果它们是以独立于平台的格式序列化的( JSON ,xml),甚至可以在不同的编程语言之间交换项目。