0

我正在开发一个订阅 JBoss 4 上的两个主题并处理传入消息的新应用程序。实际上,我正在使用两个DefaultMessageListenerContainer具有持久订阅的连接。

当我对持久订阅使用相同的 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 的原因是因为我们尝试用它的订阅替换旧的应用程序。这个旧应用程序连接到一个 JMS 事务中的主题,并且能够使用相同的客户端 ID。

4

2 回答 2

0

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

  • 每个消息侦听器都可以使用具有唯一客户端 ID 的连接。
  • 两个消息侦听器可以使用相同的连接。
  • 升级到 JMS 2 代理(例如ActiveMQ Artemis)。JMS 2 放宽了对持久订阅的要求,不再严格要求客户 ID。
于 2021-07-05T15:23:36.490 回答
0

我想一种可能的解决方案是使用 SingleConnectionFactory 并在其上设置 clientId。所以只有一个连接将用于两个主题

于 2021-07-05T13:21:24.350 回答