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

What is the difference between a message channel and the message queue itself?

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

它们是不同的东西。队列实际上包含将以 FIFO 方式处理(推送到侦听器)的消息。

渠道是一种传递信息的媒介。
这到底是什么意思?在一本书 "Enterprise Integration Patterns" 中它说:

Connect the applications using a Message Channel, where one application writes information to the channel and the other one reads that information from the channel.

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

还有通道中不同协议和通道中不同数据格式的概念,其中您使用的每个协议都有一个单独的通道,也许每个数据格式都有一个单独的通道(XML, JSON 等)。 这将有助于不同的队列从不同的渠道取货。但是为什么不直接针对不同的数据格式调用不同的队列呢?渠道的作用到底是什么?只是一个连接吗?

我是 MQM 的新人。我刚刚被分配到这个涉及生成和使用消息的项目,我正在努力解决这个问题。

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

有两种类型的频道:

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

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

所以, 简单来说, 通道是客户端应用程序和队列管理器(或队列管理器之间)之间用于发送 and/or 接收消息的通信媒体。

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

希望对您有所帮助。

要进一步扩展 Shashi 的回答,请记住所引用的 EIP 书籍讨论了高级消息传递模式。在这种情况下,作者需要一个通用术语来表示消息在两点之间传输的媒介,并选择了 "channel" 这个词。

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

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

基于这个例子,很明显,书中使用的 channel 和任何消息传递定义的 channel 都是在不同的抽象层次上。正如 MQ 使用的那样,channel 是一组特定的配置参数,用于定义通信路径并包括 CONNAMEMAXMSGL、调整参数、SSL 等属性MQ channel 成功启动后,您可以通过显示通道状态看到它的 运行 实例。对于 CLUSRCVRSVRCONN 和(不太常见)RCVRRQSTR 频道,您可能会看到同一频道的多个实例同时处于活动状态。

如果你仍然和我在一起,你可能已经注意到术语 channel 的 MQ 用法总是描述一个或多个点对点网络连接,而 EIP 书中的术语 channel 的用法大致翻译为 "the thing that moves messages between application endpoints." 考虑到使用共享内存直接连接到队列管理器的两个应用程序将使用 channel 在 EIP 中定义,但 而不是 ,因为该术语由 IBM MQ 定义。

基于该示例,应该清楚术语 channel 的 EIP 版本包括队列管理器 and 任何 MQ 连接在队列管理器和应用程序端点之间。

总结一下:

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

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

WebSphere MQ 队列

队列是消息的容器。连接到托管队列的队列管理器的业务应用程序可以从队列中检索消息或将消息放入队列。队列在它可以容纳的最大消息数和这些消息的最大长度方面都具有有限的容量。

Reference

频道

WebSphere® MQ 使用两种不同类型的通道:

  • 消息通道,它是两个队列管理器之间的单向通信link。 WebSphere MQ 使用消息通道在队列管理器之间传输消息。要双向发送消息,您必须为每个方向定义一个通道。
  • 一个 MQI(消息队列接口)通道,它是双向的,将应用程序(MQI 客户端)连接到服务器机器上的队列管理器。 WebSphere MQ 使用 MQI 通道在 MQI 客户端和队列管理器之间传输 MQI 调用和响应

Reference