ActiveMQ生成不存在的队列

时间:2016-08-26 12:59:46

标签: java spring spring-mvc jms activemq

我在Spring应用程序中使用ActiveMQ时遇到问题。

我在不同的机器上有一些环境。在每台机器上,我安装了一个ActiveMQ实例。现在,我意识到我只能在一台服务器上安装一个ActiveMQ实例,很少有应用程序可以使用该ActiveMQ来发送消息。因此,我必须更改队列名称,以便为不同的环境("queue.search.sandbox""queue.search.production",...)提供不同的队列。

在更改之后,现在ActiveMQ正在生成新队列,但也会生成旧队列,尽管没有这样的配置。

我使用的是带Java配置的Java Spring应用程序,而不是XML。

首先,我创建queueTemplate作为Spring bean:

@Bean
public JmsTemplate jmsAuditQueueTemplate() {
    log.debug("ActiveMQConfiguration jmsAuditQueueTemplate");
    JmsTemplate jmsTemplate = new JmsTemplate();
    String queueName = "queue.audit.".concat(env.getProperty("activeMqBroker.queueName.suffix"));
    jmsTemplate.setDefaultDestination(new ActiveMQQueue(queueName));
    jmsTemplate.setConnectionFactory(connectionFactory());
    return jmsTemplate;
}

其次,我创建了ActiveMQ Listener配置:

@Bean
public DefaultMessageListenerContainer jmsAuditQueueListenerContainer() {
    log.debug("ActiveMQConfiguration jmsAuditQueueListenerContainer");
    DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
    dmlc.setConnectionFactory(connectionFactory);
    String queueName = "queue.audit.".concat(env.getProperty("activeMqBroker.queueName.suffix"));
    ActiveMQQueue activeMQ = new ActiveMQQueue(queueName);
    dmlc.setDestination(activeMQ);
    dmlc.setRecoveryInterval(30000);

    dmlc.setSessionTransacted(true);
    // To perform actual message processing
    dmlc.setMessageListener(auditQueueListenerService);

    dmlc.setConcurrentConsumers(10);
    // ... more parameters that you might want to inject ...
    return dmlc;
}

构建我的应用程序后,结果我已经正确创建了带后缀("queue.audit.sandbox")的队列,但是在ActiveMQ生成一段时间后和旧版本("queue.audit")。

有人知道ActiveMQ是如何做到这一点的吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

队列的索引中可能仍有一个条目,因此当ActiveMQ重新启动时,它会显示队列。如果您想确定目的地,请使用启动目的地并通过拒绝授权条目中连接用户帐户的“admin”权限来禁用自动创建

答案 1 :(得分:0)

一段时间后,ActiveMQ刚刚停止创建不存在的队列。 现在,我们已经预期了行为,没有不必要的队列。

我仍然没有发现是什么解决了这个问题,是真诚的......