消息通道和消息队列本身有什么区别?

alo*_*aop 17 messaging message-queue mq ibm-mq

消息通道和消息队列本身有什么区别?

他们是不同的东西.队列实际上保存将以FIFO方式处理(推送到侦听器)的消息.

信道是传输消息的媒介.
这究竟是什么意思?在一本书"企业集成模式"中,它说:

使用消息通道连接应用程序,其中一个应用程序将信息写入通道,另一个应用程序从通道读取该信息.

这是否意味着此消息通道实际上将队列从消息的生产者和消费者中抽象出来?但它真的不对吗?当生产者必须将消息放入队列时,它实际上指定了它想要连接的队列管理器和队列名称.

还有通道中不同协议的概念和通道中的不同数据格式,您可能为每个协议使用单独的通道,也可能是每种数据格式(XML,JSON等)的单独通道.这将有助于不同的队列从不同的频道中获取.但为什么不直接为不同的数据格式调用不同的队列?渠道的作用究竟是什么?它只是一个连接?

我是MQM的全新人物.我刚刚被分配到这个涉及制作和消费消息的项目,我正试图围绕这个问题.

T.R*_*Rob 15

为了扩展Shashi的答案,请记住,引用的EIP书谈到了高级消息传递模式.在这种情况下,作者需要一个通用术语,用于在两点之间传输消息并选择"通道"一词.

出于本书的目的,对于任何消息传输供应商,a 通道连接任何两个移动消息的端点.在这种情况下,通道具有属于服务类的属性并支持各种模式.它可能是1-1,1-many,many-1,many-many等.

因此,例如,如果它是ZeroMQ,则端点是两个对等节点,并且它们之间没有消息传递引擎.对于IBM MQ,一个端点始终是队列管理器(一种消息传递引擎),另一个端点是应用程序或另一个队列管理器.

根据本实施例中,应该显而易见的是,信道如在本书中使用和信道通过任何消息传输所限定在不同的抽象级别.13759 MQ,一个信道是定义的通信路径配置参数的特定集合,并且包括这样的属性为CONNAME,MAXMSGL,调谐参数,SSL参数等一旦MQ 信道成功启动,则可以看到它的运行实例通过显示频道状态.在的情况下CLUSRCVR,SVRCONN和(不太常见)RCVRRQSTR信道,可能会看到相同的信道同时激活的多个实例.

如果您还在我身边,您可能已经注意到术语通道的MQ使用总是描述一个或多个点对点网络连接,而EIP书对术语通道的使用大致翻译为"移动消息的东西"在应用程序端点之间." 考虑使用共享内存直接连接到队列管理器的两个应用程序将使用EIP中定义的通道,而不是由IBM MQ定义的术语.

基于该示例,应该清楚的是,术语通道的EIP版本包括队列管理器以及队列管理器和应用程序端点之间的任何MQ连接.

总结一下:

  • EIP book的通道是所有消息传递基础结构,它不是应用程序端点之一,在MQ上下文中它包括队列管理器和任何MQ通道.
  • IBM MQ 通道是定义队列管理器与另一个队列管理器或客户端应用程序之间的网络连接的特定配置.

我希望这可以澄清术语,而不是让事情进一步混淆.如果需要,我会根据任何评论进行更新.


Sha*_*shi 9

消息队列存储生产者发送的消息,以便将它们传递给消费者.通道是用于将消息从生产者传输到队列,从队列传递到消费者,或者从队列管理器中的一个队列传输到另一个队列管理器中的另一个队列的媒体或通信链接.

有两种类型的渠道:

1)消息信道是两个队列管理器之间的单向通信链路.消息通道用于在两个队列管理器之间传输消息.

2)MQI通道将应用程序(生产者或消费者)连接到服务器计算机上的队列管理器.需要MQI通道来在MQ客户端应用程序和队列管理器之间传输MQ API调用和响应.

因此,简单来说,channel是客户端应用程序和队列管理器之间(或队列管理器之间)用于发送和/或接收消息的通信介质.

MQ使用专有协议将消息从客户端应用程序传输到队列管理器和队列管理器之间.消息中包含的数据格式无关紧要,它可以是包括字节,XML或JSON在内的任何内容.任何类型的数据都可以通过同一个通道发送.

希望这有帮助.