49

在我的工作团队中,我们大量使用 IBM MQ 技术进行跨应用程序通信。我最近在 Hacker News 和其他地方看到了有关其他 MQ 技术(如RabbitMQ )的信息。我对它是什么有一个基本的了解(一个通常检查的区域来放置和获取消息),但是我想知道它到底擅长什么?我怎么知道我想在哪里以及何时使用它?为什么不坚持使用更基本的进程间消息传递形式?

4

5 回答 5

82

到目前为止,所有的解释都是准确且切中要害的——但可能会遗漏一些东西:消息队列的主要好处之一:弹性。

想象一下:您需要与两个或三个其他系统进行通信。如今,一种常见的方法是 Web 服务,如果您需要立即得到答案,这很好。

但是:Web 服务可能已关闭且不可用 - 那您会怎么做?将您的消息放入消息队列(在您的机器/服务器上也有一个组件)通常可以在这种情况下工作 - 您的消息只是没有被传递并因此现在被处理 - 但稍后它会在另一个时服务端重新联机。

所以在很多情况下,使用消息队列连接不同的系统是一种更可靠、更健壮的来回发送消息的方式。它并不适用于所有事情(如果您想知道 MSFT 的当前股价,将该请求放入队列可能不是最好的主意) - 但在很多情况下,例如将订单放入供应商的消息中队列,它工作得非常好,可以帮助缓解其他技术的一些可靠性问题。

于 2010-05-19T21:09:17.600 回答
17

MQ 代表消息队列。

它是一个抽象层,允许多个进程(可能在不同的机器上)通过各种模型(例如,点对点、发布订阅等)进行通信。根据实现的不同,它可以配置为保证可靠性、错误报告、安全性、发现、性能等。

您可以使用套接字手动完成所有这些操作,但这非常困难。

例如:假设您希望进程进行通信,但其中一个可能会在中间死掉,然后重新连接。您将如何确保临时消息不会丢失?MQ 解决方案可以为您做到这一点。

于 2010-05-19T19:44:22.803 回答
11

消息队列系统应该会给你一些好处。其中最重要的是监控和交易行为。

如果您想免受故障(例如电源故障)的影响,事务设计很重要。想象一下,您想通知银行系统 ATM 提款,并且每次请求都必须执行一次,无论中间哪个服务器暂时出现故障。MQ 系统将允许您跨多个数据库、MQ 和其他系统协调事务。

不用说,与命名管道、TCP 或其他非事务性工具相比,这样的系统非常慢。如果需要高性能,您将不允许通过磁盘写入消息。相反,它会使你的设计复杂化——实现奇异的可靠和快速的通信,这将设计师推向真正不平凡的技巧。

MQ 系统通常允许用户查看队列内容、编写插件、清除队列等。

于 2010-05-19T19:42:39.517 回答
3

MQ 仅代表消息队列。

当您需要可靠地发送不依赖于时间的进程间/跨平台/跨应用程序消息时,您会使用一个。

消息队列接收消息,将其放入适当的队列中,并等待应用程序在准备好时检索消息。

于 2010-05-19T19:42:13.090 回答
0

参考:Web 服务可能会关闭且不可用 - 那你会怎么做?作为对此的延伸;如果您的本地网络和本地电脑也出现故障怎么办?当您等待系统恢复其他地方的相关部署系统时,等待该数据需要查看替代数据流。否则,这可能不足以满足当今和未来物联网 (IOT) 要求的“实时”响应。

如果您想要各种 FIFO 流的真正并行、非易失性存储(至少在信号链的某个点),请使用 FPGA 和 FRAM 存储器。FRAM 以时钟速度运行,FPGA 设备可以在运行中重新编程添加和删除,但是需要许多独立的并行数据流(当然在既定的约束范围内)。

于 2015-03-28T02:55:58.833 回答