【发布时间】:2014-02-17 02:13:33
【问题描述】:
我有一个 DefaultMessageListenerContainer 配置如下:
DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
container.setConcurrentConsumers(4);
container.setConnectionFactory(connectionFactory);
container.setDestinationName(String.format("Consumer.%s.VirtualTopic.%s", group, topic));
container.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
container.setSessionTransacted(true);
container.setMessageListener(new DelegatingMessageListener(listener, messageMapper, event));
container.start();
消息容器从不接收消息,并且我的消息侦听器从未被调用。保持所有其他相同,如果我只是将 DefaultMessageListenerContainer 切换到 SimpleMessageListenerContainer,它可以工作 - 但 SimpleMessageListenerContainer 在连接丢失后不会恢复
日志中没有错误,几乎没有任何相关消息。有没有人知道为什么会发生这种情况?
【问题讨论】:
-
对我来说没有任何意义;尝试开启 TRACE 级别的日志记录。
-
@GaryRussell 我已启用跟踪。 ActiveMQ 本身似乎甚至没有记录任何内容,这表明订阅从未真正发生过(我怀疑)。查看 Spring 的源代码,我看到
SimpleMessageListenerContainer有一个重写的doStart方法,它实际上创建了侦听器。我在DefaultMessageListenerContainer中没有看到对应的代码,这很有趣。也许我错过了什么。 -
是的,当然;你需要打电话给
afterPropertiesSet()。
标签: spring jms activemq spring-jms