springboot整合mq同时监听queue和topic

前言:springboot和mq整合的时候,默认情况下,要么只能监听queue要么只能监听topic,而不能二者兼得。

在application.properties文件中通过如下配置项,切换监听消息的类型。

1

2

#为true时是topic模式,为false是queue模式

spring.jms.pub-sub-domain=true

如果想同时监听queue和topic怎么办?实现步骤如下:

 

1:取消mq的默认配置,选择自定义配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

//MQ configuration class

@Configuration

public class MqConfig {

  @Bean

  public Queue queue(){

      return new ActiveMQQueue("mvp.queue");

  }

  @Bean

  public Topic topic(){

      return new ActiveMQTopic("mvp.topic");

  }

  @Bean

  public ActiveMQConnectionFactory connectionFactory() {

      return new ActiveMQConnectionFactory("zhu""zhu.123""tcp://192.168.25.134:61616");

  }

  //这个bean的id是jmsListenerContainerTopic

  @Bean

  public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory) {

      DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();

      bean.setPubSubDomain(true);

      bean.setConnectionFactory(connectionFactory);

      return bean;

  }

  //这个bean的id是jmsListenerContainerQueue

  @Bean

  public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ActiveMQConnectionFactory connectionFactory) {

      DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();

      bean.setConnectionFactory(connectionFactory);

      return bean;

  }

  @Bean

  public JmsMessagingTemplate jmsMessagingTemplate(ActiveMQConnectionFactory connectionFactory){

      return new JmsMessagingTemplate(connectionFactory);

  }

}

2:发送点对点消息

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@RestController

public class QueueController {

 

    @Autowired

    private Queue queue;

 

    @Autowired

    private JmsMessagingTemplate jmsMessagingTemplate;

 

    @RequestMapping("/send")

    public void send() {

        jmsMessagingTemplate.convertAndSend(queue, "一杀");

    }

 

}

3:监听点对点消息

1

2

3

4

5

6

7

8

9

@Component

public class QueueConsumer {

 

    @JmsListener(destination="mvp.queue",containerFactory="jmsListenerContainerQueue"

   public void readMessage(String text){ 

      System.out.println("接收到消息:"+text); 

   }  

 

}

4:发送topic消息

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@RestController

public class TopicController {

 

    @Autowired

    private Topic topic;

 

    @Autowired

    private JmsMessagingTemplate jmsMessagingTemplate;

 

    @RequestMapping("/send1")

    public void send() {

        jmsMessagingTemplate.convertAndSend(topic, "topic-message");

    }

 

}

 

5:监听topic消息

1

2

3

4

5

6

7

8

9

@Component

public class TopicConsumer {

 

    @JmsListener(destination="mvp.topic",containerFactory="jmsListenerContainerTopic"

   public void readMessage(String text){ 

      System.out.println("接收到消息:"+text); 

   }  

 

}

到此:就可以实现在一个springboot工程中既能监听topic也可以监听queue。

完整demo代码:https://pan.baidu.com/s/15pE2fuuYyi5v2FpiiON4OQ

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值