我正在使用DefaultMessageListenerContainer来使用来自主题的消息(Broker是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();
不幸的是,容器错过了关于该主题的一些消息。 有人知道我做错了吗?
答案 0 :(得分:2)
您的订阅看起来不耐用。如果是,则在您的子线程离线/启动时将保存消息。您的订阅者将从完全启动的点开始获取消息 - 之前发送的消息将丢失。
答案 1 :(得分:1)