我有一个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在连接丢失后无法恢复
日志中没有错误,几乎没有任何相关消息。有没有人有理由说明为什么会这样?
答案 0 :(得分:14)
在Java中构建容器(在Spring应用程序上下文之外)时,需要在afterPropertiesSet()
之前调用start()
。
上下文会自动为Spring bean执行此操作。