什么是MQ,为什么我要使用它?

时间:2010-05-19 19:38:52

标签: activemq rabbitmq ibm-mq

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

6 个答案:

答案 0 :(得分:57)

到目前为止,所有的解释都是准确而且重要的 - 但可能缺少一些东西:消息排队的主要好处之一:弹性。

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

但是:Web服务可能已关闭且无法使用 - 您接下来要做什么?将您的消息放入消息队列(在您的计算机/服务器上也有一个组件)通常可以在这种情况下工作 - 您的消息现在不会被传递并因此被处理 - 但是它将在稍后,当另一个时服务的一面重新上线。

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

答案 1 :(得分:13)

MQ代表消息队列。

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

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

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

答案 2 :(得分:7)

消息队列系统应该给你几个奖金。其中最重要的是监控和交易行为。

如果您想要免于电源故障等故障,交易设计非常重要。想象一下,您想要通知银行系统ATM取款,并且每次请求都必须完成一次,无论哪个服务器暂时在中间失败。 MQ系统允许您协调跨多个数据库,MQ和其他系统的事务。

毋庸置疑,与命名管道,TCP或其他非事务性工具相比,此类系统非常慢。如果需要高性能,则不允许通过磁盘写入消息。相反,它会使您的设计复杂化 - 实现异国情调的可靠和快速通信,从而将设计师推向真正非常重要的技巧。

MQ系统通常允许用户观察队列内容,编写插件,清除队列等等。

答案 3 :(得分:2)

MQ只代表Message Queue。

当您需要可靠地发送与时间无关的进程间/跨平台/跨应用程序消息时,您将使用一个。

Message Queue接收消息,将其放入正确的队列,等待应用程序在准备好时检索消息。

答案 4 :(得分:0)

消息队列构成了经典“企业集成模式”一书和website中描述的许多模式的基础。

答案 5 :(得分:0)

参考:网络服务可能已关闭且无法使用 - 您接下来要做什么? 作为对此的延伸;如果您的本地网络和本地电脑也出现故障怎么办?当您等待系统在其他地方恢复依赖的已部署系统时,等待该数据需要查看备用数据流。 否则,对于今天和未来的物联网(IOT)要求,这可能不是足够好的“实时”响应。

如果您想要各种FIFO流的真正并行,非易失性存储(至少在信号链的某个点),请使用FPGA和FRAM存储器。 FRAM以时钟速度运行,并且FPGA器件可以在运行中重新编程,并且需要带走许多独立的并行数据流(当然,在已建立的约束内)。