队列管理器的多个侦听器

时间:2016-08-24 12:23:17

标签: jms ibm-mq mq

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

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可用。

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

  • 许多侦听器可以侦听同一队列,只要他们不能独占访问它。每个人都会收到一部分到达的邮件。
  • QMgr管理的订阅上的侦听器专门附加到动态队列,但同一主题上的多个实例都将收到相同的消息。
  • 如果队列是群集的并且有多个实例,则需要多个侦听器来获取所有消息,因为它们通常由MQ工作负载分布在这些实例中分发。