0

我正在使用 DefaultMessageListenerContainer 来使用来自主题的消息(代理是 ActiveMQ)。因为消费者是在运行时创建的,所以我正在执行以下操作:

1)我在春天配置了一个 Conainer 模板

<bean id="topiccontainertemplate" class="org.springframework.jms.listener.DefaultMessageListenerContainer" scope="prototype" destroy-method="stop">
    <property name="connectionFactory" ref="connectionfactory" />
    <property name="pubSubDomain" value="true" />
    <property name="cacheLevelName" value="CACHE_CONSUMER" />
    <property name="destinationName" value="default" />
</bean>

2)当需要一个新的消费者时,我从应用程序上下文中获得一个新的消费者并重新配置destinationName。

DefaultMessageListenerContainer container = context.getBean("topiccontainertemplate", DefaultMessageListenerContainer.class);
container.setDestinationName(localEntity.getId().getDestination());
container.setMessageListener(getListener());
container.start();

不幸的是,该容器错过了有关该主题的一些消息。有人知道我在做什么错吗?

4

2 回答 2

2

您的订阅看起来并不持久。如果是这样,当您的潜艇离线/启动时,消息就会被保存。您的订阅者将从完全启动的那一刻开始收到消息 - 在此之前发送的消息将丢失。

于 2012-06-02T15:03:29.457 回答
1

经过更多测试后,我们在消费者创建过程中发现了竞争条件。消息没有丢失,它们没有在我们的代码中正确分发。

于 2012-06-04T15:41:25.350 回答