我们用发布订阅模式操作时,点对点的就不起作用:
http://localhost:8080/activemq/my/order?msg=oop
看到有消息但是没有消费;也就是说,这种发布订阅模式模式操作,无效!
如何两个同时都可以?
1、 在配置文件里面,注释掉 #spring.jms.pub-sub-domain=true
2、在启动类中添加
//需要给topic定义独立的JmsListenerContainer
@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
bean.setPubSubDomain(true);
bean.setConnectionFactory(activeMQConnectionFactory);
return bean;
}
3、在消费者类;@JmsListener如果不指定独立的containerFactory的话是只能消费queue消息!
@JmsListener(destination = "tv.topic", containerFactory="jmsListenerContainerTopic")
代码:
/**
*消费者
*/
@Component
public class TopicSub {
//实时监听器监听order.queue这个消息队列
@JmsListener(destination = "tv.topic", containerFactory="jmsListenerContainerTopic")
public void receiveTopic1(String text){
System.out.println("TopicSub 消费者1 收到的消息为:"+text);
}
@JmsListener(destination = "tv.topic", containerFactory="jmsListenerContainerTopic")
public void receiveTopic2(String text){
System.out.println("TopicSub 消费者2 收到的消息为:"+text);
}
@JmsListener(destination = "tv.topic")
public void receiveTopic3(String text){
System.out.println("TopicSub 消费者3 收到的消息为:"+text);
}
}
4、其它都一样。
5、启动运行
http://localhost:8080/activemq/my/topic?msg=90884
可以知晓消费者3是没有消费的,是没有加@JmsListener的containerFactory的话,那只能消费queue消息 !
注意:
默认消费者并不会消费订阅发布类型的消息,这是由于springboot默认采用的是p2p模式进行消息的监听!