如何使用Spring JM访问FQQN



我的Artemis经纪人的配置如下:

<address name="PublishSubscribeWithPreDefinedQueues">
  <multicast>
    <queue name="Queue1"/>
    <queue name="Queue2"/>
  </multicast>
</address>

我如何告诉消费客户端连接到队列1?根据文档,我必须将地址名称和队列名称与::分开,但我无法正常工作。

@JmsListener(destination = "PublishSubscribeWithPreDefinedQueues::Queue1")

这将创建一个称为PublishSubscribeWithPreDefinedQueues::Queue1的新地址。

有什么想法吗?谢谢!

您试图实现的是共享耐用的消费者。多个听众,但是负载平衡了同一FQQN的多个消费者

所以我也有同样的问题,我可以使用Spring Boot。我看了一些春季靴子,看到@jmslistener正在设置一个MessagingMessageListenerAdapter,这是一个MessageListener适配器,可调用您定义的方法。有趣的部分是AmpactMessageListenerContainer,它是

弹簧消息侦听容器的抽象基类 实施。可以托管标准JM javax.jms.messagelistener或春季的SessionawaremessageListener 实际消息处理。

有一个方法getDefaultSubscriptionName(Object messageListener)可以获取您的消息侦听器。如果我们看插入:

    protected String getDefaultSubscriptionName(Object messageListener) {
    if (messageListener instanceof SubscriptionNameProvider) {
        return ((SubscriptionNameProvider) messageListener).getSubscriptionName();
    }
    else {
        return messageListener.getClass().getName();
    }
}

因此,如果我们不提供订阅名称,则spring将占用org.springframework.jms.listener.adapter.messagingmessagingmessagegelisteneradapter,因为所有@jmslisteners都是MessagingMesgingMesgageMessageGeListenerAdapter。了配置它,我们必须将工厂设置为订阅共享且耐用为true。

@Bean
public DefaultJmsListenerContainerFactory containerFactory(ConnectionFactory connectionFactory) {
    DefaultJmsListenerContainerFactory factory =
            new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setSubscriptionDurable(true);
    factory.setSubscriptionShared(true);
    factory.setDestinationResolver(new BeanFactoryDestinationResolver(beanFactory)); //or new DynamicDestinationResolver()
    factory.setPubSubDomain(true);
    return factory;
}

现在您可以使用以下内容:

@JmsListener(destination = "PublishSubscribeWithPreDefinedQueues", containerFactory="containerFactory", subscription="Queue1")

现在,订阅名称是地址的队列名称。

相关内容

  • 没有找到相关文章

最新更新