队列管理器的多个侦听器

ula*_*lab 2 jms mq ibm-mq

队列管理器可以有多个侦听器吗?到目前为止,我已经使用了一种监听器/队列管理器组合,想知道这是否可能。这是因为我们有 2 个应用程序连接到同一个队列管理器,并且似乎存在问题。

T.R*_*Rob 5

listener该术语在 MQ 上下文中有多种含义。让我们看看是否可以消除术语上的一些混乱,然后回答与每个术语相关的问题。

正如规范中所定义的,JMS 侦听器是一个实现回调机制的对象。onMessage当消息和呼叫到达时,它会监听目的地。目的地可以是任何符合 JMS 的传输提供者托管的队列或主题。

在 IBM MQ 术语中,a是处理服务器上的入站连接请求的listener进程 ( )。runmqlsr尽管它们可以处理各种协议,但实际上它们几乎都是绑定端口(默认为 1414)并协商套接字上的连接请求的 TCP 侦听器。

TCP 端口
Tim 的答案适用于第二个上下文。MQ 可以侦听多个端口上的套接字,实际上这样做很常见。每个侦听器仅侦听一个端口。它可以跨所有网络接口侦听该端口,也可以绑定到特定网络接口。但是,没有两个侦听器可以绑定到相同的接口和端口组合。

在 B2B 环境中,最佳实践是为每个外部业务合作伙伴运行专用侦听器,以跨专用访问路径隔离其每个连接。在内部,我通常建议为 QMgr 到 QMgr、应用程序到 QMgr 以及交互式用户连接使用单独的端口。

从这个意义上说,可以在给定的 QMgr 上运行多个侦听器。每个侦听器都可以接受多个连接。他们的工作是协商连接,然后将套接字交给消息通道代理,该代理代表远程连接的客户端或 QMgr 与 QMgr 进行对话。

JMS 监听器
根据注释,Ulab 指的是 JMS 监听器。这些对象建立与队列管理器的连接,然后在GET模式下等待新消息到达目的地。消息到达后,他们调用onMessage异步回调例程的方法。

对于“队列管理器是否可以有多个 (JMS) 侦听器? ”这一问题,答案肯定是肯定的。多线程应用程序可以连接多个侦听器,可以同时连接多个应用程序实例,并且具有足够可用内存、磁盘和 CPU 的单个队列管理器可以处理数千个应用程序连接。

当然,这些应用程序中的每一个最终都会连接到一个或多个队列,因此问题就变成了它们是否可以连接到同一队列。

  • 许多侦听器可以侦听同一个队列,只要他们没有获得对该队列的独占访问权即可。每个人都会收到到达消息的一部分。
  • QMgr 管理的订阅上的侦听器专门附加到动态队列,但同一主题的多个实例都将收到相同的消息。
  • 如果队列是集群化的并且有多个实例,则需要多个侦听器来获取所有消息,因为这些消息通常通过 MQ 工作负载分布在这些实例之间进行分配。