Jms 队列管理器的多个侦听器

Jms 队列管理器的多个侦听器,jms,ibm-mq,mq,Jms,Ibm Mq,Mq,一个队列管理器是否可以有多个侦听器?到目前为止,我使用了一个侦听器/队列管理器组合,不知道这是否可能。这是因为我们有两个应用程序连接到同一个队列管理器,并且似乎有问题。是的,您可以创建任意数量的侦听器: 但是,两个应用程序没有理由不能通过同一个侦听器(在同一端口上)连接到队列管理器。您遇到了什么问题?在MQ上下文中,术语侦听器有两种含义。让我们看看是否可以澄清术语上的一些混淆,然后回答与每个术语相关的问题 正如规范中定义的,是一个实现回调机制的对象。它监听目的地上的消息,并在消息到达时调用on

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

是的,您可以创建任意数量的侦听器:


但是,两个应用程序没有理由不能通过同一个侦听器(在同一端口上)连接到队列管理器。您遇到了什么问题?

在MQ上下文中,术语
侦听器有两种含义。让我们看看是否可以澄清术语上的一些混淆,然后回答与每个术语相关的问题

正如规范中定义的,是一个实现回调机制的对象。它监听目的地上的消息,并在消息到达时调用
onMessage
。目的地可以是由任何符合JMS的传输提供程序承载的队列或主题

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

TCP端口
蒂姆的回答适用于第二种情况。MQ可以侦听多个端口上的套接字,实际上这样做很常见。每个侦听器只侦听一个端口。它可以在所有网络接口上侦听该端口,也可以绑定到特定的网络接口。但是,没有两个侦听器可以绑定到相同的接口和端口组合

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

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

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

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

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

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

它们显然都使用同一个队列,如果另一个成功使用,则其中一个会超时。这不重要。您确定一个应用程序没有消费所有消息,而第二个应用程序没有任何消息可消费吗?通常情况下,不同的应用程序使用不同的队列。同一个应用程序的多个实例可能使用一个队列,但不相关的应用程序可能会使用它们自己的队列。是的,我同意。这是实际使用者的模拟使用者应用程序,它们都部署在同一台服务器上,导致了问题。好的。所以不同的听众不会有帮助。他们需要在不同的队列管理器上,或者在同一队列管理器上的不同队列上。不幸的是,这个问题太模糊,无法明确回答。不要说“我们有两个应用程序连接到同一个队列管理器,并且似乎有问题”,而是详细地告诉我们问题是什么,并提供诸如屏幕截图、堆栈跟踪、日志条目等证据。如果这是在任何较流行的标记上,它将在几分钟内关闭。请看:。谢谢罗布。因此,如果有两个应用程序(具有类似的JMS侦听器配置)部署在同一个JBOSS服务器上,它们中的一个会使用它,还是两个都会得到它的一部分?这取决于消息到达的速度与处理速度的关系。当应用程序发出一个
GET
时,MQ通过将句柄推到堆栈上来表示它。第一条消息转到注册GET的最后一个对象。如果该对象在新消息到达之前完成处理并发出下一个GET,它将获得下一条消息。如果消息到达的速度比处理的速度快,则会在队列上使用GET句柄将消息传递给下一个对象。