队列管理器的多个侦听器
more than one listener for the queue manager
一个队列管理器可以有多个侦听器吗?到目前为止,我已经使用了一个 listener/queue 经理组合,想知道这是否可行。这是因为我们有 2 个应用程序连接到同一个队列管理器并且似乎有问题。
是的,您可以根据需要创建任意数量的侦听器:
http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.explorer.doc/e_listener.htm
但是,两个应用程序没有理由不能通过同一个侦听器(在同一个端口上)连接到队列管理器。你 运行 遇到了什么问题?
术语 listener
在 MQ 上下文中有几个含义。让我们看看是否可以消除一些术语上的混淆,然后回答与每个术语相关的问题。
按照规范中的定义,JMS listener 是一个实现了回调机制的对象。它监听消息的目的地,并在消息到达时调用 onMessage
。目的地可以是任何符合 JMS 的传输提供程序托管的队列或主题。
在 IBM MQ 术语中,listener
是处理服务器上的入站连接请求的进程 (runmqlsr
)。尽管它们可以处理多种协议,但实际上它们几乎都是绑定端口(默认为 1414)并在套接字上协商连接请求的 TCP 侦听器。
TCP 端口
蒂姆的回答适用于其中的第二种情况。 MQ 可以侦听多个端口上的套接字,实际上这样做很常见。每个侦听器只在一个端口上侦听。它可以在所有网络接口上侦听该端口,也可以绑定到特定网络接口。但是,没有两个侦听器可以绑定到相同的接口和端口组合。
在 B2B 环境中,最佳做法是 运行 每个外部业务合作伙伴的专用侦听器,以隔离它们跨专用访问路径的每个连接。在内部,我通常为 QMgr-to-QMgr、app-to-QMgr 和交互式用户连接推荐单独的端口。
从这个意义上讲,可以在给定的 QMgr 上 运行 多个侦听器。这些侦听器中的每一个都可以接受许多连接。他们的工作是协商连接,然后将套接字交给消息通道代理,消息通道代理代表远程连接的客户端或 QMgr 与 QMgr 对话。
JMS 侦听器
根据评论,Ulab 指的是 JMS 侦听器。这些对象建立到队列管理器的连接,然后以 GET
模式等待新消息到达目的地。消息到达后,他们调用 onMessage
方法,这是一个异步回调例程。
关于“一个队列管理器可以有多个 (JMS) 侦听器吗?”这个问题,答案肯定是肯定的。多线程应用程序可以连接多个侦听器,多个应用程序实例可以同时连接,并且具有足够内存、磁盘和 CPU 可用的单个队列管理器可以处理数千个应用程序连接。
当然,这些应用程序中的每一个最终都连接到一个或多个队列,因此问题就变成了它们是否可以连接到同一个队列。
- 许多侦听器可以在同一个队列上侦听,只要他们没有独占访问权限即可。每个人都会收到一部分到达的消息。
- QMgr 管理的订阅上的侦听器专门附加到动态队列,但同一主题上的多个实例都将收到相同的消息。
- 如果队列是集群化的并且有多个实例,则需要多个侦听器来获取所有消息,因为它们通常由 MQ 工作负载分布分布在这些实例上。
一个队列管理器可以有多个侦听器吗?到目前为止,我已经使用了一个 listener/queue 经理组合,想知道这是否可行。这是因为我们有 2 个应用程序连接到同一个队列管理器并且似乎有问题。
是的,您可以根据需要创建任意数量的侦听器:
http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.explorer.doc/e_listener.htm
但是,两个应用程序没有理由不能通过同一个侦听器(在同一个端口上)连接到队列管理器。你 运行 遇到了什么问题?
术语 listener
在 MQ 上下文中有几个含义。让我们看看是否可以消除一些术语上的混淆,然后回答与每个术语相关的问题。
按照规范中的定义,JMS listener 是一个实现了回调机制的对象。它监听消息的目的地,并在消息到达时调用 onMessage
。目的地可以是任何符合 JMS 的传输提供程序托管的队列或主题。
在 IBM MQ 术语中,listener
是处理服务器上的入站连接请求的进程 (runmqlsr
)。尽管它们可以处理多种协议,但实际上它们几乎都是绑定端口(默认为 1414)并在套接字上协商连接请求的 TCP 侦听器。
TCP 端口
蒂姆的回答适用于其中的第二种情况。 MQ 可以侦听多个端口上的套接字,实际上这样做很常见。每个侦听器只在一个端口上侦听。它可以在所有网络接口上侦听该端口,也可以绑定到特定网络接口。但是,没有两个侦听器可以绑定到相同的接口和端口组合。
在 B2B 环境中,最佳做法是 运行 每个外部业务合作伙伴的专用侦听器,以隔离它们跨专用访问路径的每个连接。在内部,我通常为 QMgr-to-QMgr、app-to-QMgr 和交互式用户连接推荐单独的端口。
从这个意义上讲,可以在给定的 QMgr 上 运行 多个侦听器。这些侦听器中的每一个都可以接受许多连接。他们的工作是协商连接,然后将套接字交给消息通道代理,消息通道代理代表远程连接的客户端或 QMgr 与 QMgr 对话。
JMS 侦听器
根据评论,Ulab 指的是 JMS 侦听器。这些对象建立到队列管理器的连接,然后以 GET
模式等待新消息到达目的地。消息到达后,他们调用 onMessage
方法,这是一个异步回调例程。
关于“一个队列管理器可以有多个 (JMS) 侦听器吗?”这个问题,答案肯定是肯定的。多线程应用程序可以连接多个侦听器,多个应用程序实例可以同时连接,并且具有足够内存、磁盘和 CPU 可用的单个队列管理器可以处理数千个应用程序连接。
当然,这些应用程序中的每一个最终都连接到一个或多个队列,因此问题就变成了它们是否可以连接到同一个队列。
- 许多侦听器可以在同一个队列上侦听,只要他们没有独占访问权限即可。每个人都会收到一部分到达的消息。
- QMgr 管理的订阅上的侦听器专门附加到动态队列,但同一主题上的多个实例都将收到相同的消息。
- 如果队列是集群化的并且有多个实例,则需要多个侦听器来获取所有消息,因为它们通常由 MQ 工作负载分布分布在这些实例上。