當前位置:
首頁 >
ActiveMQ入门-ActiveMQ跟SpringBoot整合发送接收Topic
發布時間:2024/4/13
37
豆豆
生活随笔
收集整理的這篇文章主要介紹了
ActiveMQ入门-ActiveMQ跟SpringBoot整合发送接收Topic
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
默認情況下@JmsListener不能監聽topic,需要添加工廠類
package jms;import org.apache.activemq.command.ActiveMQQueue; import org.apache.activemq.command.ActiveMQTopic; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.annotation.EnableJms; import org.springframework.jms.config.DefaultJmsListenerContainerFactory; import org.springframework.jms.config.JmsListenerContainerFactory;import javax.jms.ConnectionFactory;@Configuration @EnableJms //啟用jms功能 public class ActiveMqConfig {//如果要使用topic類型的消息,則需要配置該bean@Bean("jmsTopicListenerContainerFactory")public JmsListenerContainerFactory jmsTopicListenerContainerFactory(ConnectionFactory connectionFactory){DefaultJmsListenerContainerFactory factory= new DefaultJmsListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setPubSubDomain(true); //這里必須設置為true,false則表示是queue類型return factory;}} public void sendMessageTopic(ActiveMQTopic destination,String message) {jmsTemplate.convertAndSend(destination,"這是一個廣播"); } @JmsListener(destination = "mytest.topic",containerFactory = "jmsTopicListenerContainerFactory") public void receiveToic(String text){System.out.println(text); } @Test public void sendMessageTopic()throws Exception{ActiveMQTopic destination = new ActiveMQTopic("mytest.topic");producer.sendMessageTopic(destination,"你好,ActiveMQ"); }剛才出現了一個問題,在topic消費后也返回了一個提示信息,但是報錯了
對于點對點消費者來說, 我可以給發送者回一條消息,告訴他我收到消息了,但是對于topic,發送者對接受者是否接受到消息不感興趣,所以在發送者如果回送消息的時候會報錯。
最后一個比較重要的知識點:對于queue來說,我們的消息發送出去,會一直保存在服務器上,等待消費者消費他,如果此時沒有消費者在線,會一直等待,會把消息做持久化處理,保存在硬盤上,如果消費者上線,消費者就能監聽到這條消息并進行消費。
對于topic來說,我一條消息發送出去,可能會有多個消費者去消費,如果這個時候消費者不在線,默認情況下,等消費者上線,他也無法收到這條消息,相當于這條消息丟失了。
也可以配置topic的持久化,保證消費者不在線的情況下,也能收到這條消息,那這跟queue的機制就類似了。
==特殊情況:如果消息發送失敗怎么辦?一直失敗怎么辦?==
==消息的重試機制,死信隊列==
總結
以上是生活随笔為你收集整理的ActiveMQ入门-ActiveMQ跟SpringBoot整合发送接收Topic的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ActiveMQ跟SpringBoot整
- 下一篇: 使用SpringTask定时获取传感器设