javascript
新手入门教程-------Spring Boot中集成RabbitMQ
AMQP:是Advanced Message Queuing Protocol的簡稱,高級消息隊列協議,是一個面向消息中間件的開放式標準應用層協議。
?
定義了以下特性:
- 消息方向
- 消息隊列
- 消息路由(包括:點到點和發布-訂閱模式)
- 可靠性
- 安全性
RabitMQ:是以AMQP協議實現的一種中間件產品。RabbitMq是一個開源的AMQP實現,服務器端用erlang語言編寫,支持多種客戶端。
常用概念:
通常由三個概念:發消息者、隊列、收消息者,RabbitMQ?在這個基本概念之上, 多做了一層抽象, 在發消息者和 隊列之間, 加入了交換器 (Exchange). 這樣發消息者和隊列就沒有直接聯系, 轉而變成發消息者把消息給交換器, 交換器根據調度策略再把消息再給隊列。
?
首先,先安裝Erland,通過官方下載頁面http://www.erlang.org/downloads獲取exe安裝包,直接打開并完成安裝。
接著,
環境搭建可以參考:http://blog.didispace.com/spring-boot-rabbitmq/
RabbitMQ管理:
我們可以直接通過配置文件的訪問進行管理,也可以通過Web的訪問進行管理。下面我們將介紹如何通過Web進行管理。
在sbin文件夾打開CMD,執行rabbitmq-plugins enable rabbitmq_management命令,開啟Web管理插件,這樣我們就可以通過瀏覽器來進行管理了。
重啟mq的命令是:rabbitmq-server restart
?
?
- 打開瀏覽器并訪問:http://localhost:15672/,并使用默認用戶guest登錄,密碼也為guest。我們可以看到如下圖的管理頁面:
?
- 點擊Admin標簽,在這里可以進行用戶的管理。例如添加用戶,記得要給用戶設置權限,不然可能會導致下面工程連接不上。
?
利用springboot來進行整合:
1. 編寫配置文件類:
在com.example包中增加類,名稱為HelloRabbitConfig,并修改代碼為
2. 編寫發送消息類:
在com.example包中增加類,名稱為HelloSender,并修改代碼為:
3.編寫接收消息類:
在com.example包中增加類,名稱為HelloReceiver,并修改代碼為
4. 編寫RestController 類,調用發送消息:
在com.example包中增加類,名稱為HelloController,并修改代碼為
5. 運行測試
在sbin文件夾CMD調用rabbitmq-server restart之后,在工程所在目錄打開命令行,執行mvn spring-boot:run,最后在瀏覽器輸入http://localhost:8080/send/上帝
參考:https://blog.csdn.net/u012930316/article/details/76853778
?
?
工程解析:
1.配置文件:
在配置文件中,僅僅配置了一個名為hello的隊列,以后發送,接收都與這個隊列有關
2. 發送消息:
2.1發送消息使用模板機制,用springboot自動注入rabbitmqTemplate,它封裝好了鏈接,管道,轉換等
2.2消息轉換和發送
void convertAndSend(String routingKey, Object message) throws AmqpException;
它的注釋是:Convert a Java object to an Amqp {@link Message} and send it to a default exchange with a specific routing key.
將一個Java對象轉換為Amqp消息,然后用缺省的減緩及指定路由鍵發送信息。
?
public void convertAndSend(String exchange, String routingKey, final Object object, CorrelationData correlationData)
exchange:交換機名稱
routingKey:路由關鍵字
object:發送的消息內容
correlationData:消息ID
?
3. 接收消息
3.1監聽消息
在類上聲明@RabbitListener(queues = "hello"),表示監聽hello隊列
3.2消息處理句柄
在接收處理消息的方法上聲明@RabbitHandler
Annotation that marks a method to be the target of a Rabbit message? listener within a class that is annotated with {@link RabbitListener}.
消息消費者:
消費者負責聲明交換機(生產者也可以聲明),隊列,以及兩者的綁定操作。
交換機:
/**
? ? ?* 針對消費者配置
? ? ? ? FanoutExchange: 將消息分發到所有的綁定隊列,無routingkey的概念
? ? ? ? HeadersExchange :通過添加屬性key-value匹配
? ? ? ? DirectExchange:按照routingkey分發到指定隊列
? ? ? ? TopicExchange:多關鍵字匹配
? ? ?*/
? ? @Bean
? ? public DirectExchange defaultExchange() {
? ? ? ? return new DirectExchange(EXCHANGE);
? ? }
?
隊列:
@Bean
? ? public Queue queue() {
? ? ? ? return new Queue("spring-boot-queue", true); //隊列持久
?
? ? }
?
綁定:binding:
?
? @Bean
? ? public Binding binding() {
? ? ? ? return BindingBuilder.bind(queue()).to(defaultExchange()).with(AmqpConfig.ROUTINGKEY);
? ? }
?
?
?
?
整體:整個工程比較簡單,沒有什么特殊的配置,僅僅三個類文件即可實現消息的發送和接受。
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的新手入门教程-------Spring Boot中集成RabbitMQ的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java并发编程实战——volatile
- 下一篇: Spring Boot 设置 ASCII