如何解决Azure 服务总线主题上的非持久 JMS 订阅
我正在尝试使用 JMS 在 Azure 服务总线上创建非持久主题订阅。此功能最近可用于高级服务总线层。
我正在使用 Spring Boot 和 Spring JMS,并且我使用 @JmsListener
订阅了该主题。我设法使用 Azure 库使其工作,但 Spring 等效项不起作用。
如果我使用 azure-servicebus-jms
依赖项并使用 ServiceBusJmsConnectionFactory
设置我的侦听器,如下例所示,它可以正常工作并动态创建对该主题的非持久、非共享订阅(我想要):
使用 ServiceBusJmsConnectionFactory
@Bean
public ConnectionFactory connectionFactory() {
ServiceBusJmsConnectionFactorySettings connectionFactorySettings = new ServiceBusJmsConnectionFactorySettings();
connectionFactorySettings.setConnectionIdleTimeoutMS(20000);
return new ServiceBusJmsConnectionFactory("[CONN-STRING]",connectionFactorySettings);
}
@Bean
public JmsListenerContainerFactory containerFactory(ConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setSubscriptionDurable(false);
factory.setPubSubDomain(true);
return factory;
}
@JmsListener(destination = "mytopicName",containerFactory = "containerFactory")
public void listenerMethod() {...}
为了与 ActiveMQ 等其他消息代理具有互操作性,我想使用 JmsConnectionFactory
代替 ServiceBusJmsConnectionFactory
。
所以我只像这样改变我的 connectionfactory
bean
@Bean
public ConnectionFactory connectionFactory() {
JmsConnectionFactory connFactory = new JmsConnectionFactory("amqps://servicebusurl");
connFactory.setUsername(KEY NAME);
connFactory.setPassword(KEY);
return connFactory;
}
其余代码保持不变。但这不再起作用了。服务总线返回以下错误:
Open of resource:(JmsConsumerInfo: { ID:anid,destination = topicname}) failed: The messaging entity 'servicebusname:Topic:topicname|qpid-jms:receiver:ID:theid' could not be found.
我知道连接本身不是问题,因为我可以在此连接工厂的主题中发布。不知道是不是必须要使用服务总线连接工厂,或者有没有解决办法。
解决方法
我研究了 ServiceBusConnectionFactory
的工作原理,它使用了 JmsConnectionFactory
。
它自定义了 JmsConnectionFactory
的不同内容,因此我尝试以相同的方式对其进行自定义。
有效的是添加
connectionFactory.setExtension(JmsConnectionExtensions.AMQP_OPEN_PROPERTIES.toString(),(connection,uri) -> Map.of("com.microsoft:is-client-provider",true)
这使得使用连接工厂的侦听器创建非持久非共享主题订阅。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。