在spring jms主题中指定名称

时间:2017-05-03 10:55:32

标签: spring spring-boot spring-jms wso2mb

我使用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 {
}

2 个答案:

答案 0 :(得分:0)

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

  

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

     

设置用于创建的连接的JMS clientID。   请注意,这通常只能由一个连接一次使用   最好在Connection

上设置clientID

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

答案 1 :(得分:0)

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

const Telegraf = require('telegraf');
var fs = require('fs');

const app = new Telegraf(process.env.BOT_TOKEN);

var filePath = "C:\\path\\to\\my\\file.txt";

fs.watchFile(filePath, function() {
    file = fs.readFileSync(filePath);

    // Send message to chat or group with the file content here

    console.log("File content at: " + new Date() + " is: \n" + file);
})