在 spring jms 主题中指定名称

assign name in spring jms topic

我正在使用 spring JMS 连接到 WSO2MB 服务器。一切正常,但所有听众都分配了相同的 ID。为了使其独一无二,我提供了 clientId 但它不起作用。我找不到可以提供名称的任何其他字段。

我什至在 JMS 侦听器上提供了 id,但没有成功。

@Bean
@ConditionalOnProperty(name="my.listener.active", matchIfMissing = true)
public JmsListenerContainerFactory jmsListenerContainerFactory(@Qualifier("listenerConnectionFactory") ConnectionFactory connectionFactory) throws URLSyntaxException {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setClientId("listener"+listenerTopic);
    if (Boolean.valueOf(listenerTopic)) {
        factory.setSubscriptionDurable(true);
        factory.setPubSubDomain(true);
    }
    return factory;
}

@JmsListener(destination = "${default-queue-name-to-listen}", id = "${default-queue-name-to-listen}")
public void receiveMessage(final Message<T> message) throws JMSException {
}

每个连接都需要有一个唯一的clientID

void org.apache.activemq.ActiveMQConnectionFactory.setClientID(String clientID)

Sets the JMS clientID to use for the created connection. Note that this can only be used by one connection at once so generally its a better idea to set the clientID on a Connection

您的解决方案是使用 org.springframework.jms.connection.SingleConnectionFactory

订阅名称使连接名称唯一并解决了我的问题

@JmsListener(
        destination = "${default-queue-name-to-listen}",
        subscription = "${default-queue-name-to-listen}"
    )
    public void receiveMessage(Message<T> message) throws JMSException {}