问题描述
我正在尝试从 azure 服务总线主题异步读取消息。我已经根据 MS 文档创建了 JMS 侦听器
@JmsListener(destination = TOPIC_NAME,containerFactory = "topicJmsListenerContainerFactory",subscription = SUBSCRIPTION_NAME)
public void receiveMessage(User user) {
logger.info("Received message: {}",user.getName());
}
我需要确保 topicJmsListenerContainerFactory 容器工厂是否支持异步处理?
我尝试像下面那样实现 DefaultJmsListenerContainerFactory,但是通过使用它,我无法从服务总线顶部获取任何消息。它抛出异常找不到消息传递实体。我可以使用 topicJmsListenerContainerFactory 容器工厂获取消息
@Bean
@ConditionalOnMissingBean(name = "jmsListenerContainerFactory")
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(DefaultJmsListenerContainerFactoryConfigurer Configure,ConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
Configure.configure(factory,connectionFactory);
return factory;
}
参考:
How to create DefaultMessageListenerContainer in Spring-Boot?
有人请教一下吗?
解决方法
提供 topicJmsListenerContainerFactory
也是 DefaultJmsListenerContainerFactory
类的实例,正如我们所知,DefaultJmsListenerContainerFactory
提供了 Spring JMS 的所有优点,因此它应该可以正常工作。