摘要:安裝到官方網站下載最新的的安裝包,并解壓到本地目錄下,下載鏈接如下。修改消費者使用配置消費者監聽的隊列,其中是接收到的消息收到的報文為接收到的消息重新執行
安裝ActiveMQ
到Apache官方網站下載最新的ActiveMQ的安裝包,并解壓到本地目錄下,下載鏈接如下:http://activemq.apache.org/do...。
進入bin 目錄,如果我們是32位的機器,就雙擊 win32 目錄下的 activemq.bat,如果是64位機器,則雙擊 win64 目錄下的 activemq.bat ,運行結果如下:
成功之后在瀏覽器輸入 http://127.0.0.1:8161/ 地址,可以看到 ActiveMQ 的管理頁面,用戶名和密碼默認都是 admin
工程結構
添加 pom 依賴
org.springframework.boot spring-boot-starter-activemq
config 配置
# activemq spring.activemq.broker-url=tcp://localhost:61616 spring.activemq.user=admin spring.activemq.password=admin #默認為true表示使用內存的activeMQ,不需要安裝activeMQ server spring.activemq.in-memory=true #如果此處設置為true,需要加如下的依賴包 #隊列模式org.apache.activemq #activemq-pool # 否則會自動配置失敗,報JmsMessagingTemplate注入失敗 spring.activemq.pool.enabled=false
創建 消息提供者:Producer.java
import javax.jms.Destination; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsMessagingTemplate; import org.springframework.stereotype.Service; @Service public class Producer { @Autowired // 也可以注入JmsTemplate,JmsMessagingTemplate對JmsTemplate進行了封裝 private JmsMessagingTemplate jmsTemplate; // 發送消息,destination是發送到的隊列,message是待發送的消息 public void sendMessage(Destination destination, final String message){ jmsTemplate.convertAndSend(destination, message); } }
創建消費者一: Consumer.java
import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Component; @Component public class Consumer { // 使用JmsListener配置消費者監聽的隊列,其中text是接收到的消息 @JmsListener(destination = "mytest.queue") public void receiveQueue(String text) { System.out.println("Consumer收到的報文為:"+text); } }
創建消費者二:Consumer1 .java
import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Component; @Component public class Consumer1 { // 使用JmsListener配置消費者監聽的隊列,其中text是接收到的消息 @JmsListener(destination = "mytest.queue") public void receiveQueue(String text) { System.out.println("Consumer1收到的報文為:"+text); } }
測試
創建一個 ActivceMQQueue 對象,表示隊列模式,下面會介紹主題模式。
import org.apache.activemq.command.ActiveMQQueue; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.jms.Destination; @RunWith(SpringRunner.class) @SpringBootTest public class JmsApplicationTests { @Autowired private Producer producer; @Test public void contextLoads() { Destination destination = new ActiveMQQueue("mytest.queue"); for(int i=0; i<100; i++){ producer.sendMessage(destination, "myname is chhliu!!!"); } } }雙向隊列
使用 @SendTo 注解可以將方法的返回值重新放入到消息隊列中,供其他消費者消費
這里我們修改 Consumer1.java 增加注解 @SendTo
public class Consumer1 { // 使用JmsListener配置消費者監聽的隊列,其中text是接收到的消息 @JmsListener(destination = "mytest.queue") @SendTo("out.queue") public String receiveQueue(String text) { System.out.println("Consumer1收到的報文為:"+text); return "return message" + text; } @JmsListener(destination = "out.queue") public void outQueue(String text){ System.out.println("Consumer1 outQueue:"+text); } }主題模式
配置文件中需要增加
# 啟用 topic 模式 spring.jms.pub-sub-domain=true
修改 Consumer1 增加對主題的監聽
import org.springframework.jms.annotation.JmsListener; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.stereotype.Component; @Component public class Consumer1 { // 使用JmsListener配置消費者監聽的隊列,其中text是接收到的消息 @JmsListener(destination = "mytest.queue") @SendTo("out.queue") public String receiveQueue(String text) { System.out.println("Consumer1 收到的報文為:"+text); return "return message" + text; } @JmsListener(destination = "out.queue") public void outQueue(String text){ System.out.println("Consumer1 outQueue:"+text); } @JmsListener(destination = "mytest.topic") public void topicQueue(String text){ System.out.println("Consumer 接收到的 topic 消息:" + text); } }
修改測試類
增加發送主題消息
import org.apache.activemq.command.ActiveMQQueue; import org.apache.activemq.command.ActiveMQTopic; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.jms.Destination; @RunWith(SpringRunner.class) @SpringBootTest public class JmsApplicationTests { @Autowired private Producer producer; @Test public void contextLoads() { Destination destination = new ActiveMQQueue("mytest.queue"); Destination topicDestination = new ActiveMQTopic("mytest.topic"); for(int i=0; i<10; i++){ producer.sendMessage(destination, "Queue Message......"); producer.sendMessage(topicDestination, "Topic Message!!!"); } } }
消息的結果為:
沒有出現 隊列消息。此時需要修改我們的監聽,指定出是哪種類型的
增加配置類
這個配置類沒有在那個工程圖上面出現,添加一個類就好。
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 public class JmsConfig { @Bean public JmsListenerContainerFactory> topicListenerFactory(ConnectionFactory connectionFactory) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setPubSubDomain(true); factory.setConnectionFactory(connectionFactory); return factory; } @Bean public JmsListenerContainerFactory> queueListenerFactory(ConnectionFactory connectionFactory) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setPubSubDomain(false); factory.setConnectionFactory(connectionFactory); return factory; } }
修改消費者 Consumer1.java
import org.springframework.jms.annotation.JmsListener; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.stereotype.Component; @Component public class Consumer1 { // 使用JmsListener配置消費者監聽的隊列,其中text是接收到的消息 @JmsListener(destination = "mytest.queue", containerFactory = "queueListenerFactory") @SendTo("out.queue") public String receiveQueue(String text) { System.out.println("Consumer1 收到的報文為:"+text); return "return message" + text; } @JmsListener(destination = "out.queue", containerFactory = "queueListenerFactory") public void outQueue(String text){ System.out.println("Consumer1 outQueue:"+text); } @JmsListener(destination = "mytest.topic", containerFactory = "topicListenerFactory") public void topicQueue(String text){ System.out.println("Consumer 接收到的 topic 消息:" + text); } }
重新執行
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77730.html
摘要:還自動配置發送和接收消息所需的基礎設施。支持是一個輕量級的可靠的可伸縮的可移植的消息代理,基于協議,使用通過協議進行通信。 32. 消息傳遞 Spring框架為與消息傳遞系統集成提供了廣泛的支持,從使用JmsTemplate簡化的JMS API到使用完整的基礎設施異步接收消息,Spring AMQP為高級消息隊列協議提供了類似的特性集。Spring Boot還為RabbitTempla...
摘要:時間年月日星期六說明本文部分內容均來自慕課網。這個時候,可以啟動多臺積分系統,來同時消費這個消息中間件里面的登錄消息,達到橫向擴展的作用。 時間:2017年07月22日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程安排 Java...
摘要:介紹它是出品,最流行的,能力強勁的開源消息總線。是一個完全支持和規范的實現,盡管規范出臺已經是很久的事情了,但是在當今的應用中間仍然扮演著特殊的地位。相關文章整合使用整合使用關注我轉載請務必注明原創地址為安裝同之前一樣,直接在里面玩吧。 showImg(https://segmentfault.com/img/remote/1460000012996066?w=1920&h=1281)...
摘要:本文主要講述消息服務在中的使用。所以需要一個監聽容器工廠的概念,即接口,它會引用上面創建好的與的連接工廠,由它來負責接收消息以及將消息分發給指定的監聽器。為了消費消息,訂閱者必須保持運行的狀態。 JMS 在 SpringBoot 中的使用 摘要:本文屬于原創,歡迎轉載,轉載請保留出處:https://github.com/jasonGeng88/blog> 本文所有服務均采用doc...
摘要:本文旨在指出中集成的一些性能陷阱,在另一篇文章各組件詳解里有組件介紹及如何正確使用的內容。因此的做法會大大降低性能,并且將大部分的時間都花在反復重建這些對象上。提供的可以讓使用避免頻繁創建的問題。至于使用的性能測試則留給同學自己做了。 Github 本文旨在指出Spring/Spring Boot中集成JMS的一些性能陷阱,在另一篇文章Spring JMS各組件詳解里有Spring J...
閱讀 3737·2021-09-09 09:33
閱讀 3024·2019-08-30 15:56
閱讀 3017·2019-08-30 15:56
閱讀 3307·2019-08-30 15:55
閱讀 499·2019-08-30 15:53
閱讀 2178·2019-08-30 15:52
閱讀 662·2019-08-28 18:16
閱讀 2389·2019-08-26 13:51