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

dav*_*lab 38 activemq-classic rabbitmq ibm-mq

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

mar*_*c_s 65

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

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

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

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

  • 那么如果MQ服务器宕机了怎么办呢?它并不比 Web 服务更具弹性,不是吗? (3认同)
  • @RobHolmes:通常,您仍然可以*将它排入本地队列 - 它将在备份时传输到队列服务器 - 并且**是**,它**比典型的Web服务更具弹性..... (3认同)
  • 如何衡量软件的弹性?为什么我们应该接受 mq 比 Web 服务更有弹性? (3认同)

Uri*_*Uri 15

MQ代表消息传递队列.

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

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

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


Pav*_*sky 9

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

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

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

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