在我的团队中,我们经常使用IBM MQ技术进行跨应用程序通信。最近我在Hacker News和其他地方看到了其他MQ技术,比如RabbitMQ。我基本了解它是什么(一个常被检查的区域,用于放置和获取消息),但我想知道它究竟能做些什么?我如何知道何时需要使用它?为什么不坚持使用更基础的进程间通信方式呢?
到目前为止,所有的解释都很准确、简洁 - 但可能漏掉了一些内容:消息队列的主要优势之一是弹性。
想象一下:你需要与两个或三个其他系统通信。如今常见的方法是使用 Web 服务,如果你需要立即得到回答,这是可以的。
然而,Web 服务可能无法使用,不可用 - 那么你该怎么办呢?将你的消息放入消息队列(在你的机器/服务器上也有组件)通常会在这种情况下工作 - 你的消息现在没有被传递和处理 - 但当服务的另一端重新上线时,它将在以后被处理。
因此,在许多情况下,使用消息队列连接不同的系统是一种更可靠、更健壮的发送消息的方式。它并不适用于所有情况(如果你想了解 MSFT 的当前股价,把请求放入队列可能不是最好的选择) - 但在许多情况下,比如将订单放入供应商的消息队列中,它非常有效,并且可以帮助缓解其他技术的可靠性问题。
MQ代表消息队列。
它是一个抽象层,允许多个进程(可能在不同的机器上)通过各种模型(例如点对点、发布订阅等)进行通信。根据实现方式,它可以配置一些功能,例如保证可靠性、错误报告、安全性、发现性能等。
你可以使用套接字手动完成所有这些操作,但非常困难。
例如:假设您希望进程之间进行通信,但其中一个进程可能会在中途死亡并稍后重新连接。如何确保暂停期间的消息不会丢失?MQ解决方案可以为您完成此操作。
消息队列系统应该给你提供许多好处。其中最重要的是监视和事务行为。
如果你希望免疫故障,例如电源故障,则交易设计非常重要。想象一下,你想要通知银行系统提取ATM现金,并且必须在每个请求中恰好执行一次,无论哪些服务器在中间暂时失败。MQ系统将允许你协调多个数据库、MQ和其他系统之间的事务。
不用说,与命名管道、TCP或其他非事务工具相比,这样的系统非常慢。如果需要高性能,就不能让消息通过磁盘写入。相反,它会使你的设计变得复杂——为了实现异构可靠和快速的通信,这将把设计师推向真正非常规的技巧。
MQ系统通常允许用户观察队列内容、编写插件、清除队列等。
MQ简单地代表消息队列。
当您需要可靠地发送跨进程/跨平台/跨应用程序的消息且不受时间限制时,可以使用它。
消息队列接收消息,将其放置在正确的队列中,并等待应用程序在准备好时检索消息。