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

Activemq 什么是MQ?我为什么要使用它?,activemq,rabbitmq,ibm-mq,Activemq,Rabbitmq,Ibm Mq,在我的工作团队中,我们经常使用IBM MQ技术进行跨应用程序通信。我最近在黑客新闻和其他地方看到了其他MQ技术,如。我对它有一个基本的了解(一个放置和获取消息的常用检查区域),但我想知道它到底擅长什么?我如何知道我想在哪里使用它以及何时使用它?为什么不坚持使用更基本的进程间消息传递形式呢?MQ只是代表消息队列 当您需要可靠地发送不依赖于时间的进程间/跨平台/跨应用程序消息时,可以使用它 消息队列接收消息,将其放入适当的队列中,并等待应用程序在准备就绪时检索消息。消息队列系统应该会给您一些奖励。其

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

MQ只是代表消息队列

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


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

消息队列系统应该会给您一些奖励。其中最重要的是监控和事务行为

如果您想对故障(如电源故障)免疫,事务性设计很重要。想象一下,你想通知银行系统的ATM退款,它必须做一次一次请求,无论什么服务器在中间暂时失效。MQ系统允许您跨多个数据库、MQ和其他系统协调事务

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


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

MQ代表消息队列

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

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


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

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

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

但是:web服务可能会关闭并且不可用-那么您会怎么做?在这种情况下,将消息放入消息队列(在您的计算机/服务器上也有一个组件)通常会起作用-您的消息不会立即被传递和处理-但稍后,当服务的另一端重新联机时,它会起作用


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

参考:web服务可能会停止运行而不可用-然后你会怎么做? 作为其延伸;如果您的本地网络和本地pc也关闭了怎么办??当您等待系统恢复在其他地方部署的依赖系统时,等待该数据的系统需要查看替代数据流。 否则,对于今天和未来物联网(IOT)需求而言,这可能不够好的“实时”响应


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

那么,如果MQ服务器关闭,您会怎么做?它不比web服务更具弹性,是吗?@RobHolmes:通常,您仍然可以将其排队到本地队列中-它将在备份时传输到队列服务器-是的,它比典型的web服务更具弹性….@marc_s,我们如何在RabbitMQ中排队到本地队列?它是如何同步到MQ服务器上的队列的?您如何度量软件弹性?为什么我们应该接受mq比web服务更具弹性?所以mq听起来像是牺牲性能来提高可靠性的技术?