javascript
ActiveMQ入门-ActiveMQ跟SpringBoot整合发送接收Topic
默認(rèn)情況下@JmsListener不能監(jiān)聽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); //這里必須設(shè)置為true,false則表示是queue類型return factory;}} public void sendMessageTopic(ActiveMQTopic destination,String message) {jmsTemplate.convertAndSend(destination,"這是一個(gè)廣播"); } @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"); }剛才出現(xiàn)了一個(gè)問題,在topic消費(fèi)后也返回了一個(gè)提示信息,但是報(bào)錯(cuò)了
對(duì)于點(diǎn)對(duì)點(diǎn)消費(fèi)者來說, 我可以給發(fā)送者回一條消息,告訴他我收到消息了,但是對(duì)于topic,發(fā)送者對(duì)接受者是否接受到消息不感興趣,所以在發(fā)送者如果回送消息的時(shí)候會(huì)報(bào)錯(cuò)。
最后一個(gè)比較重要的知識(shí)點(diǎn):對(duì)于queue來說,我們的消息發(fā)送出去,會(huì)一直保存在服務(wù)器上,等待消費(fèi)者消費(fèi)他,如果此時(shí)沒有消費(fèi)者在線,會(huì)一直等待,會(huì)把消息做持久化處理,保存在硬盤上,如果消費(fèi)者上線,消費(fèi)者就能監(jiān)聽到這條消息并進(jìn)行消費(fèi)。
對(duì)于topic來說,我一條消息發(fā)送出去,可能會(huì)有多個(gè)消費(fèi)者去消費(fèi),如果這個(gè)時(shí)候消費(fèi)者不在線,默認(rèn)情況下,等消費(fèi)者上線,他也無法收到這條消息,相當(dāng)于這條消息丟失了。
也可以配置topic的持久化,保證消費(fèi)者不在線的情況下,也能收到這條消息,那這跟queue的機(jī)制就類似了。
==特殊情況:如果消息發(fā)送失敗怎么辦?一直失敗怎么辦?==
==消息的重試機(jī)制,死信隊(duì)列==
總結(jié)
以上是生活随笔為你收集整理的ActiveMQ入门-ActiveMQ跟SpringBoot整合发送接收Topic的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ActiveMQ跟SpringBoot整
- 下一篇: 使用SpringTask定时获取传感器设