队列管理器可以有多个侦听器吗?到目前为止,我已经使用了一个侦听器/队列管理器组合,并想知道这是否可能。这是因为我们有2个应用程序连接到同一个队列管理器,似乎有问题。
答案 0 :(得分:3)
是的,您可以根据需要创建尽可能多的侦听器:
http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.explorer.doc/e_listener.htm
但是,没有理由说两个应用程序无法通过同一个侦听器(在同一端口上)连接到队列管理器。你遇到了什么问题?
答案 1 :(得分:2)
MQ上下文中的术语listener
有几个含义。让我们看看我们是否可以澄清对术语的一些混淆,然后回答与每个术语相关的问题。
如规范中所定义,JMS listener是实现回调机制的对象。它会收听消息的目的地,并在它们到达时调用onMessage
。目标可以是由任何符合JMS的传输提供商托管的队列或主题。
在IBM MQ术语中,listener
是处理服务器上的入站连接请求的进程(runmqlsr
)。虽然这些协议可以处理各种协议,但实际上它们几乎都是TCP侦听器,它们绑定端口(默认为1414)并在套接字上协商连接请求。
TCP端口
蒂姆的答案适用于这些背景中的第二个。 MQ可以在多个端口上侦听套接字,实际上这是很常见的。每个侦听器只侦听一个端口。它可以在所有网络接口上侦听该端口,也可以绑定到特定的网络接口。但是,没有两个侦听器可以绑定到相同的接口和端口组合。
在B2B上下文中,最佳做法是为每个外部业务伙伴运行专用侦听器,以跨越专用访问路径隔离每个连接。在内部,我通常会为QMgr-to-QMgr,app-to-QMgr和交互式用户连接推荐单独的端口。
在这种意义上,可以在给定的QMgr上运行多个侦听器。每个听众都可以接受许多连接。他们的工作是协商连接,然后将套接字交给消息通道代理,该代理代表远程连接的客户端或QMgr与QMgr通信。
JMS听众
根据评论,Ulab引用了JMS监听器。这些对象建立与队列管理器的连接,然后在GET
模式下等待到达目的地的新消息。在消息到达时,他们调用onMessage
方法,这是一个异步回调例程。
关于问题" 队列管理器可以有多个(JMS)监听器吗?"答案肯定是肯定的。多线程应用程序可以连接多个侦听器,多个应用程序实例可以同时连接,并且单个队列管理器可以处理数千个应用程序连接,并且有足够的内存,磁盘和CPU可用。
当然,这些应用程序中的每一个最终都连接到一个或多个队列,因此问题就变成了它们是否可以连接到相同的队列。