Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ActiveMQ生成的队列不';不存在_Java_Spring_Spring Mvc_Jms_Activemq - Fatal编程技术网

Java ActiveMQ生成的队列不';不存在

Java ActiveMQ生成的队列不';不存在,java,spring,spring-mvc,jms,activemq,Java,Spring,Spring Mvc,Jms,Activemq,我在Spring应用程序中使用ActiveMQ时遇到问题 我在不同的机器上有一些环境。在每台机器上,我都安装了一个ActiveMQ实例。现在,我意识到我只能在一台服务器上安装一个ActiveMQ实例,很少有应用程序可以使用该ActiveMQ发送消息。因此,我必须更改队列名称,以便在不同的环境中拥有不同的队列(“queue.search.sandbox”,“queue.search.production”,…) 在该更改之后,现在ActiveMQ正在生成新队列,但也生成旧队列,尽管没有这样的配置

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

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

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

我使用的是Java配置的JavaSpring应用程序,而不是XML

首先,我创建
queueTemplate
作为Springbean:

@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是如何做到这一点的吗?提前感谢。

队列索引中可能还有一个条目,因此当ActiveMQ重新启动时,它将显示队列。如果要确定目标,请使用启动目标,并通过拒绝授权条目中连接用户帐户的“管理员”权限来禁用自动创建。队列索引中可能仍有一个条目,因此当ActiveMQ重新启动时,它将显示队列。如果要确定目标,请使用启动目标,并在一段时间后,通过拒绝授权条目中连接用户帐户的“管理员”权限来禁用自动创建,ActiveMQ刚刚停止创建不存在的队列。 现在,我们有了预期的行为,没有了不必要的队列


但我仍然没有发现是什么解决了这个问题,老实说…

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


但我仍然没有发现是什么解决了这个问题,老实说…

是否有其他软件订阅队列
队列。audit
?不,没有。一切都发生在核心应用程序内部。删除“数据”目录,并使用webconsole或jmx检查是否有到旧队列的连接。顺便说一句,您可以在同一台服务器上有多个activemq实例,您只需更改侦听端口。谢谢Alexandre。我知道我可以在同一台服务器上安装多个ActiveMQ实例,但我们希望避免这种情况。通过这种方式更容易跟踪所有内容。是否有其他软件订阅队列
队列。审核
?不,没有。一切都发生在核心应用程序内部。删除“数据”目录,并使用webconsole或jmx检查是否有到旧队列的连接。顺便说一句,您可以在同一台服务器上有多个activemq实例,您只需更改侦听端口。谢谢Alexandre。我知道我可以在同一台服务器上安装多个ActiveMQ实例,但我们希望避免这种情况。通过这种方式跟踪所有内容更容易。这听起来像是我问题的解决方案,但我没有对ActiveMQ配置进行任何更改,它只是停止了创建队列。就像配置中有一些参数用于在ActiveMQ重新启动后重新创建未使用的队列一样……索引存储为kahadb的一部分,而不是ActiveMQ配置。一旦db-*.log文件循环出来,我想队列就不会出现了。您还可以备份kahadb文件夹,删除.data文件(索引)并让ActiveMQ重新创建索引。这听起来像是我问题的解决方案,但我没有对ActiveMQ配置进行任何更改,它只是停止创建队列。就像配置中有一些参数用于在ActiveMQ重新启动后重新创建未使用的队列一样……索引存储为kahadb的一部分,而不是ActiveMQ配置。一旦db-*.log文件循环出来,我想队列就不会出现了。您还可以备份kahadb文件夹,删除.data文件(索引)并让ActiveMQ重新创建索引。