我正在尝试使用 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
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.
我知道连接本身不是问题,因为我可以使用此连接工厂在主题中发布。我想知道是否必须使用服务总线连接工厂或者是否有解决方案。