SpringBoot的RabbitMQ訊息佇列: 一、訊息傳送接收第一印象
編制RabbitMQ配置、傳送、接受的程式碼
1、編寫配置檔案類
在com.example包中增加類,名稱為HelloRabbitConfig,並修改程式碼為
- package com.example;
- import org.springframework.amqp.core.Queue;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- @Configuration
-
publicclass HelloRabbitConfig {
- @Bean
- public Queue helloQueue() {
- returnnew Queue("hello");
- }
- }
2、編寫傳送訊息類
在com.example包中增加類,名稱為HelloSender,並修改程式碼為
- package com.example;
- import java.util.Date;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
-
import org.springframework.amqp.core.AmqpTemplate;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- @Component
- publicclass HelloSender {
- protectedstatic Logger logger=LoggerFactory.getLogger(HelloSender.class);
- @Autowired
- private AmqpTemplate rabbitTemplate;
-
public
- String context = "hello "+name+" --" + new Date();
- logger.debug("HelloSender: " + context);
- this.rabbitTemplate.convertAndSend("hello", context);
- return context;
- }
- }
3、編寫接受訊息類
在com.example包中增加類,名稱為HelloReceiver,並修改程式碼為
- package com.example;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.amqp.rabbit.annotation.RabbitHandler;
- import org.springframework.amqp.rabbit.annotation.RabbitListener;
- import org.springframework.stereotype.Component;
- @Component
- @RabbitListener(queues = "hello")
- public class HelloReceiver {
- protected static Logger logger = LoggerFactory.getLogger(HelloReceiver.class);
- @RabbitHandler
- public void process(String hello) {
- logger.debug("HelloReceiver : " + hello);
- }
- }
4、編寫RestController,呼叫傳送訊息
在com.example包中增加類,名稱為HelloController,並修改程式碼為
- package com.example;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- @RestController
- publicclass HelloController {
- protectedstatic Logger logger=LoggerFactory.getLogger(HelloController.class);
- @Autowired
- private HelloSender helloSender;
- @RequestMapping("/send/{name}")
- public String helloworld(@PathVariable String name) {
- return helloSender.send(name);
- }
- }
5、執行測試
A、啟動Docker中容器rabbitmq5672。docker start rabbitmq5672 (如果已啟動,則忽略)
B、啟動工程。在工程所在的資料夾開啟命令列,且在命令列中執行 mvn spring-boot:run
C、在瀏覽器中輸入 http://localhost:8080/send/上帝
瀏覽器中顯示
控制檯中顯示,成功傳送、接收訊息
三、小結
1、rabbitmq連線
1.1 springboot,在啟動時,根據系統配置檔案的引數建立一個rabbitmq連線。參看控制檯日誌:
(MBeanExporter.java:431)- Registering beans for JMX exposure on startup
(MBeanExporter.java:916)- Bean with name 'rabbitConnectionFactory' has been autodetected for JMX exposure
(MBeanExporter.java:678)- Located managed bean 'rabbitConnectionFactory': registering with JMX server as MBean [org.springframework.amqp.rabbit.connection:name=rabbitConnectionFactory,type=CachingConnectionFactory]
(DefaultLifecycleProcessor.java:343)- Starting beans in phase -2147482648
(DefaultLifecycleProcessor.java:343)- Starting beans in phase 2147483647
(AbstractConnectionFactory.java:347)- Created new connection: [email protected] [delegate=amqp://[email protected]:5672/, localPort= 62881]
1.2、在springboot啟動之後,檢視rabbitmq(http://localhost:15672/)的connections,也可以檢視到。當然,你也可以停止springboot去看連結(停止之後,當然就沒有連結了).
1.3、把logbak.xml的root的等級修改為debug,你會發現監聽在不斷的連結reabitmq;它就是一個心跳。通過這個心跳,rabbitmq也知道存在哪些監聽器在監聽那個佇列。
2、配置檔案
在配置檔案中,僅僅配置了一個名為hello的佇列。以後傳送、接收都與這個佇列相關。
3、傳送訊息
3.1、傳送訊息使用模板機制,用springboot自動注入的rabbitTemplate,它已經封裝好連結、管道、轉換等。
3.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訊息,然後再用預設的交換機指定路由鍵傳送訊息。
4、接受訊息
4.1、監聽訊息
在類上宣告@RabbitListener(queues = "hello"),表示監聽hello佇列
4.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}.
5、印象
整個工程比較簡單,沒有什麼特殊的配置,僅僅三個類檔案即可實現訊息的傳送和接受。
相關推薦
SpringBoot的RabbitMQ訊息佇列: 一、訊息傳送接收第一印象
編制RabbitMQ配置、傳送、接受的程式碼 1、編寫配置檔案類 在com.example包中增加類,名稱為HelloRabbitConfig,並修改程式碼為 package com.example; import org.springframework.amqp.core.Queue;
一、百度Iot第一印象
之前對應物聯網平臺比較好奇,在工作上也使用了Tlink物聯網平臺,實現了裝置的聯網。但是糾結於雲平臺服務商是否能提供長久、穩定的服務,所以沒有在深入研究。 而對於自身能力而已,重頭到腳開發一套物聯網雲平臺,能力有限。因此再三選擇下,覺定試用百度的IoT物聯接入平臺。寫下部落
十一、訊息對佇列和消費確認
訊息到佇列 訊息傳送後,如何確定到訊息是否到達了相應的佇列?RabbitMQ預設在傳送訊息時,如果不能根據交換器型別和路由鍵找到相應的佇列,訊息將直接丟棄。而要想知道訊息是否達到佇列或沒到佇列卻不想訊息丟失,RabbitMQ提供有解決方案: 設定mandatory引數 為true時,
Windows訊息佇列、執行緒訊息佇列,視窗訊息的概念與關係
1.視窗 Windows程式是由一系列的視窗構成的,每個視窗都有自己的視窗過程,視窗過程就是一個擁有有固定 Signature 的 C函式,具體格式如下: LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wPa
訊息佇列 一(轉)
原文連結:訊息佇列(一) 一、訊息佇列概述 訊息佇列中介軟體是分散式系統中重要的元件,主要解決應用耦合、非同步訊息、流量削峰等問題。實現高效能、高可用、可伸縮和最終一致性架構,是大型分散式系統不可缺少的中介軟體。 目前生產環境中,使用較多的訊息佇列有Activ
Kafka訊息佇列介紹、環境搭建及應用:C#實現消費者-生產者訂閱
一:kafka介紹 kafka(官網地址:http://kafka.apache.org)是一種高吞吐量的分散式釋出訂閱的訊息佇列系統,具有高效能和高吞吐率。 1.1 術語介紹 Broker Kafka叢集包含一個或多個伺服器,這種伺服器被稱為broker
常用訊息佇列對比、選擇參考和訊息佇列認知
目錄: 1、訊息佇列之常用協議 1.1、AMQP 1.2、MQTT協議 1.3、STOMP協議 1.4、XMPP協議 2、訊息佇列之模型 3、訊息佇列的組成模組 4、常用訊息佇列介紹 4.1、RabbitMQ 4.2、ActiveMQ 4.3、Rocket
linux c程式設計:System V訊息佇列一
訊息佇列可以認為是一個訊息連結串列,System V 訊息佇列使用訊息佇列識別符號標識。具有足 夠特權的任何程序都可以往一個佇列放置一個訊息,具有足夠特權的任何程序都可以從一個給定佇列讀出一個訊息。在某個程序往一個佇列寫入訊息之前,並不需要另外某個程序在該佇列上等待訊息的到達。System V 訊
RabbitMQ之訊息持久化(佇列持久化、訊息持久化)
訊息的可靠性是RabbitMQ的一大特色,那麼RabbitMQ是如何保證訊息可靠性的呢——訊息持久化。 為了保證RabbitMQ在退出或者crash等異常情況下資料沒有丟失,需要將queue,exchange和Message都持久化。 queue的持久化 queue
SpringBoot的RabbitMQ訊息佇列: 三、第二模式"Work queues"
上一節的兩個工程,一個負責傳送,一個負責接收,也就是一一對於的關係。 只要訊息發出了,接收者就處理;當接收效率較低時,就會出現接收者處理不過來,我們就可能會處理不過來,於是我們就可能多配置接受者。這個模式就是"Work queues",它的結構如下
程序間通訊機制(管道、訊號、共享記憶體/訊號量/訊息佇列)、執行緒間通訊機制(互斥鎖、條件變數、posix匿名訊號量)
(1)系統中每個訊號量的資料結構(sem)struct sem { int semval; /* 訊號量的當前值 */ unsigned short semzcnt; /* # waiting for zero */ unsigned short semncnt; /* # w
redis 訊息佇列 釋出、訂閱模式
向佇列中放入元素命令 lpush key value1 value2 value3,rpush key value1 value2 value3; 從佇列中取元素命令 lpop key;rpo
剖析nsq訊息佇列(一) 簡介及去中心化實現原理
分散式訊息佇列nsq,簡單易用,去中心化的設計使nsq更健壯,nsq充分利用了go語言的goroutine和channel來實現的訊息處理,程式碼量也不大,讀不了多久就沒了。後期的文章我會把nsq的原始碼分析給大家看。 主要的分析路線如下 分析nsq的整體框架結構,分析如何做到的無中心化分散式拓撲結構,如何
.NET Core使用App.Metrics監控訊息佇列(一):初探
一、簡介 App Metrics是一個開放原始碼和跨平臺的.NET庫,用於記錄應用程式中的指標。App Metrics可以在.NET Core或也支援.NET 4.5.2的完整.NET框架上執行。 App Metrics通過在記憶體中進行取樣和聚合,並提供可擴充套件性點以指定間隔將指標重新整理到儲存庫中,
網際網路面試開小灶系列之訊息佇列(一)
目錄 背景 為什麼使用訊息佇列 訊息佇列有什麼優缺點 訊息佇列的選型 重複消費你們是怎麼解決的? @(目錄) 背景 程式設計師不懂點訊息佇列的知識,怎麼能證明你
訊息佇列-一篇讀懂rabbitmq(生命週期,confirm模式,延遲佇列,叢集)
什麼是訊息佇列? 就是生產者生產一條訊息,傳送到這個rabbitmq,消費者連線rabbitmq並且進行消費,生產者和消費者並需要知道對方是如何工作的,從而實現程式之間的解耦,非同步和削峰,這也就是訊息佇列的作用。 使用的場景也有很多,比如使用者支付購買之後的傳送簡訊,增加使用者積分等等,只要能
【Visual C 】遊戲開發筆記十二 遊戲輸入訊息處理 一 鍵盤訊息處理
------------------------------------------------------------------------------------------------------------------------------淺墨歷時一年為遊戲程式設計
訊息佇列及常見訊息佇列介紹
一、訊息佇列(MQ)概述 訊息佇列(Message Queue),是分散式系統中重要的元件,其通用的使用場景可以簡單地描述為: 當不需要立即獲得結果,但是併發量又需要進行控制的時候,差不多就是需要使用訊息佇列的時候。 訊息佇列主要解決了應用耦合、
mq 訊息佇列 以及常見訊息佇列的介紹
一、訊息佇列(MQ)概述 訊息佇列(Message Queue),是分散式系統中重要的元件,其通用的使用場景可以簡單地描述為: 當不需要立即獲得結果,但是併發量又需要進行控制的時候,差不多就是需要使用訊息佇列的時候。 訊息佇列主要解決了應用耦合、非同步處理、流量削鋒等問題。
訊息佇列之非同步訊息基本概念以及ActiveMQ整合Spring常用用法介紹
一 簡介 (1)非同步訊息: 所謂非同步訊息,跟RMI遠端呼叫、webservice呼叫是類似的,非同步訊息也是用於應用程式之間的通訊。但是它們之間的區別是: RMI、Hession/Burlap、webservice等遠端呼叫機制是同步的。也就是說,當客戶端呼叫遠端方法時,客戶端