当前位置: 首页 > 知识库问答 >
问题:

对多个目标/主题使用相同的JMS客户端ID

雍光远
2023-03-14

我正在开发一个新的应用程序,该应用程序订阅JBoss 4上的两个主题并处理传入的消息。实际上,我正在使用两个默认消息警报器容器与连接的持久订阅。

当我对持久订阅使用相同的ClientID时,容器将失败,错误如下:

2021-07-02T10:28:05.487+0200 [DefaultMessageListenerContainer-1] ERROR org.springframework.jms.listener.DefaultMessageListenerContainer - Could not refresh JMS Connection for destination 'TOPIC.providerDurableTopic' - retrying using FixedBackOff{interval=5000, currentAttempts=0, maxAttempts=unlimited}. Cause: This client id 'ka03.9971.mueller.de' is already registered!

是否有可能两个人对两个不同的目的地使用相同的clientId。是否有其他ListenerContainer可以使用一个容器实例处理多个目的地?

我们尝试使用相同的clientId的原因是因为我们尝试用it订阅替换旧的应用程序。这个旧应用程序连接到一个JMS事务中的主题,并能够使用相同的客户机id。

共有2个答案

方砚
2023-03-14

JMS 1.1规范明确禁止具有相同客户端ID的多个连接。我看到您的问题有三种潜在的解决方案:

  • 每个消息侦听器都可以使用具有唯一客户端ID的连接。
  • 两个消息侦听器可以使用相同的连接
  • 升级到JMS 2代理(例如ActiveMQ Artemis)。JMS 2放宽了对持久订阅的要求,不再严格要求客户端ID
邹高峻
2023-03-14

我想一个可能的解决方案是使用单连接工厂并在其上设置客户端Id。因此,两个主题将仅使用一个连接

 类似资料:
  • 我正在使用Netty4创建一个需要为多个客户端连接提供服务的服务器。ServerBootstrap由父线程组和工作线程组构成。根据ServerBootStrap上的文档。group()方法it “为父(接收器)和子(客户端)设置EventLoopGroup。这些EventLoopGroup用于处理SocketChannel和Channel的所有事件和IO。” 据我所知,ParentExecutor

  • 我有一个应用程序需要收听多个不同的主题;每个主题都有关于如何处理消息的单独逻辑。我曾想过为每个KafkaStreams实例使用相同的kafka属性,但我得到了如下所示的错误。 错误 流处理应用程序的标识符。在Kafka集群中必须是唯一的。它用作1)默认的客户端ID前缀,2)用于成员资格管理的组ID,3)变更日志主题前缀。 问题 此错误意味着什么,以及导致此错误的原因。 假设您可以有应用程序的多个实

  • 我已经为我的在线游戏制作了一个服务器(python,twisted)。从TCP开始,后来增加了UDP的不断更新(速度有了很大的提高)。但现在,我需要将每个UDP套接字客户端与每个TCP客户端连接起来。 我首先让每个客户机连接到TCP服务器,并获得唯一的ID。然后客户端将此ID发送到UDP服务器,并将其连接起来。然后,我有一个TCP客户端的主列表(按唯一ID排序)。 我的目标是能够通过TCP和UDP

  • 问题内容: 我正在使用以下代码创建多个JMS会话,以供多个使用者使用消息。我的问题是代码以单线程方式运行。即使消息存在于队列中,第二个线程也无法接收任何内容,而是继续轮询。同时,第一个线程完成对第一批的处理,然后返回并使用剩余的消息。这里的用法有什么问题吗? 问题答案: 您的问题是prefetchPolicy。 所有消息都被分派到第一个连接的使用者,当另一个连接时他没有收到消息,因此,如果您有一个

  • 问题内容: 在我的Java应用程序中,我需要使用SSL连接到同一主机,但每次都使用不同的证书。我需要使用其他证书的原因是,远程站点使用嵌入在证书中的用户ID属性来标识客户端。 这是一个在3个不同的操作系统上运行的服务器应用程序,我需要能够在不重新启动进程的情况下切换证书。 问题答案: SSL可以向客户端提示要显示的证书。这 可能 使您可以使用一个具有多个身份的密钥存储,但是,不幸的是,大多数服务器

  • 我想使用Apache Qpid订阅Java消息服务(JMS)发布订阅服务。然而,我不想使用Java,而是想使用C。我的客户告诉我这是可能的(甚至说是微不足道的)。它们是否正确?有人能给我举个例子吗?我所看到的每一处都表明,要使用JMS,我必须使用Java。这里的要点是,该服务是第三方服务(因此我不能将其更改为使用AMQP或JMS以外的任何其他协议)。