spring boot2.0整合activeMQ,实现p2p和topic两者消息模式兼容共存

本文讲解如何在SpringBoot项目中同时使用ActiveMQ的queue和topic模式,通过定义不同的监听容器工厂实现两种消息模式的兼容共存。

上篇文章讲到使用spring boot整合activeMQ,实现ptp和topic两者消息模式,默认情况下是queue模式(也就是p2p),如果要想实现topic需要在配置文件里配上:

# 默认情况下该配置是false,activemq提供的是queue模式,若要使用topic模式需要配置为true
spring.jms.pub-sub-domain=false

上篇文章遗留了两个问题:
1.我提到如何能让这两种模式兼容共存呢?
2.评论区提到的,说开启连接池,启动项目会报错。
接下来我们分别说说这两个情况:

p2p和topic两者消息模式兼容共存

  • 基于springboot2.0+
  • 实际上消费者使用@JmsListener(destination = “queue”)监听队列消息并消费时使用的是默认的监听器:
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(JmsListeners.class)
@MessageMapping
public @interface JmsListener {
    String id() default "";

    String containerFactory() default "";

    String destination();

    String subscription() default "";

    String selector() default "";

    String concurrency() default "";
}
  • 从注解里我们看到处理指定监听的队列之外,我们还可以指定监听容器工厂,如果说我们定义两个监听容器工厂,分别是queue和topic,是不是就可以在项目里兼容共存2种模式了呢?接下来我们试试:
  • 首先我们分别定义queue和topic的监听工厂:
@Bean
public JmsListenerContainerFactory<?> queueListenerFactory(ConnectionFactory connectionFactory) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setPubSubDomain(false);
    factory.setConnectionFactory(connectionFactory);
    return factory;
}
    
@Bean
public JmsListenerContainerFactory<?> topicListenerFactory(ConnectionFactory connectionFactory) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setPubSubDomain(true);
    factory.setConcurrency("1");
    factory.setConnectionFactory(connectionFactory);
    return factory;
}
  • 然后在消费者的注解里指定监听容器工厂:
@JmsListener(destination = "queue",containerFactory = "queueListenerFactory")
public void receiveQueue(String text) {
    log.info("consumer收到queue信息:{}",text);
}

@JmsListener(destination = "topic",containerFactory = "topicListenerFactory")
public void receiveTopic(String text) {
    log.info("consumer收到topic信息:{}",text);
}
  • 到此为止就成功在项目里兼容共存queue和topic两种模式

至于第二个问题我们下一篇再说。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值