在工作中經常會用到消息隊列處理各種問題,今天指北君帶領大家來學一個很常用到的技術-RabbitMQ;接下來還會有關于RabbitMQ的系列教程,對你有幫助的話記得關注哦~
RabbitMQ是什么
隊列 :一種數據結構,先進先出。
消息隊列 :簡單的說就是用來進行消息傳輸的隊列。
消息中間件 :簡單的說就是用來傳輸消息的中間載體,就是將你的信息發送到接受方,它并不關心發送的數據是什么。RabbitMQ就是一個消息中間件。
RabbitMQ的特點
- 可靠性。支持持久化,傳輸確認,發布確認等保證了MQ的可靠性。
- 靈活的分發消息策略。這應該是RabbitMQ的一大特點。在消息進入MQ前由Exchange(交換機)進行路由消息。分發消息策略有:簡單模式、工作隊列模式、發布訂閱模式、路由模式、通配符模式。
- 支持集群。多臺RabbitMQ服務器可以組成一個集群,形成一個邏輯Broker。
- 多種協議。RabbitMQ支持多種消息隊列協議,比如 STOMP、MQTT 等等。
- 支持多種語言客戶端。RabbitMQ幾乎支持所有常用編程語言,包括 Java、.NET、Ruby 等等。
- 可視化管理界面。RabbitMQ提供了一個易用的用戶界面,使得用戶可以監控和管理消息 Broker。
- 插件機制。RabbitMQ提供了許多插件,可以通過插件進行擴展,也可以編寫自己的插件。
為什么使用消息隊列
- 解耦 ,模塊間的通信使用消息隊列進行,降低模塊之間的耦合度。
- 異步 ,模塊A處理完核心業務之后,發消息給模塊B,就可以直接返回給客戶端,提高性能。
- 削峰 ,短時間內有大量請求,可以通過消息隊列來逐個處理,防止系統宕機。
Hello World
首先,安裝RabbitMQ,可直接使用docker安裝一個。
docker 地址:https://hub.docker.com/_/rabbitmq/tags
# 拉取鏡像
docker pull rabbitmq:management
# 啟動容器
docker run -id --hostname my-rabbit
--name rabbitmq
-p 15672:15672
-p 5672:5672
-e RABBITMQ_DEFAULT_USER=admin
-e RABBITMQ_DEFAULT_PASS=admin
rabbitmq:management
然后在網頁訪問:http://服務器的ip:15672,輸入賬號密碼。記得開放端口
看到此頁面代表安裝成功
準備就緒,先寫個Hello World
- 導入pom依賴
< dependency > < groupId >org.springframework.boot< /groupId > < artifactId >spring-boot-starter-amqp< /artifactId > < /dependency >
- 準備工具類
public class ConnectionUtils { public static Connection getConnection() { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("1.15.88.28"); factory.setPort(5672); factory.setUsername("admin"); factory.setPassword("admin"); factory.setVirtualHost("/"); try { return factory.newConnection(); } catch (IOException | TimeoutException e) { e.printStackTrace(); } return null; } }
- 生產者
public class Producer { // 聲明隊列的名字 private static final String QUEUE_NAME = "queue_helloworld_1"; public static void main(String[] args) throws IOException, TimeoutException { // 1. 獲取連接 Connection connection = ConnectionUtils.getConnection(); // 2. 創建數據傳輸通道 Channel channel = connection.createChannel(); // 3. 聲明隊列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 4. 發送數據到隊列 channel.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, "第一個隊列消息...".getBytes()); // 5. 關閉通道 channel.close(); // 6. 關閉連接 connection.close(); } }
- 消費者
public class Consumer { // 聲明隊列的名字 private static final String QUEUE_NAME = "queue_helloworld_1"; public static void main(String[] args) throws IOException, TimeoutException { // 1. 獲取連接 Connection connection = ConnectionUtils.getConnection(); // 2. 創建通道 Channel channel = connection.createChannel(); // 3. 聲明隊列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 4. 聲明消費者 DefaultConsumer defaultConsumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { System.out.println("接收到的消息是:" + new String(body)); channel.basicAck(envelope.getDeliveryTag(), false); } }; // 5. 綁定消費者 channel.basicConsume(QUEUE_NAME, false, defaultConsumer); } }
- 測試
- 先啟動消費者
- 再啟動生產者
- 可以看到消費者的控制臺打印出 生產者傳遞的消息
小結
本文到這里就結束了,簡單介紹了一下RabbitMQ是什么,以及RabbitMQ的安裝;
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
模塊
+關注
關注
7文章
2750瀏覽量
48184 -
服務器
+關注
關注
12文章
9432瀏覽量
86506 -
交換機
+關注
關注
21文章
2668瀏覽量
100468 -
端口
+關注
關注
4文章
993瀏覽量
32393 -
rabbitmq
+關注
關注
0文章
19瀏覽量
1069
發布評論請先 登錄
相關推薦
RabbitMQ中的發布訂閱模型
上一篇文章中,簡單的介紹了一下RabbitMQ的work模型。這篇文章來學習一下RabbitMQ中的發布訂閱模型。 發布訂閱模型(Publish/Subscribe):簡單的說就是隊列里面的消息會被

請問有STM32F4上應用RabbitMQ或MQTT的例子嗎?
,是需要跑FreeRTOS 或 uCOS 么? 還是裸跑也沒有問題的?3、有沒有前輩能提供一下應用MOTT在STM32上的例子;另外,如果我想要用RabbitMQ呢?有沒有參考的例子?
發表于 04-03 04:35
【飛凌嵌入式 RK3399 開發板性能試用體驗】(安裝RabbitMQ消息隊列服務)
說明relang安裝成功安裝RabbitMQServer消息隊列服務apt-get install rabbitmq-server #安裝成功自動啟動查看RabbitMQServer安裝狀態
發表于 10-28 17:03
什么情況下使用RabbitMQ或 Kafka
如果你問自己是否Apache Kafka比RabbitMQ更好或RabbitMQ是否比Apache Kafka更可靠,我想在這里阻止你。本文將從更廣泛的角度討論這兩種情況。它關注的是這兩個系統提供的功能,并將指導您做出正確的決定,決定何時使用哪個系統。

什么情況下使用RabbitMQ或 Kafka
如果你問自己是否Apache Kafka比RabbitMQ更好或RabbitMQ是否比Apache Kafka更可靠,我想在這里阻止你。本文將從更廣泛的角度討論這兩種情況。它關注的是這兩個系統提供的功能,并將指導您做出正確的決定,決定何時使用哪個系統。

rabbitmq是什么?rabbitmq安裝、原理、部署
rabbitmq是什么? MQ的全稱是Messagee Queue,因為消息的隊列是隊列,所以遵循FIFO 先進先出的原則是上下游傳遞信息的跨過程通信機制。 RabbitMQ是一套開源(MPL
RocketMQ和RabbitMQ的區別
RocketMQ和RabbitMQ的區別: 架構設計:RocketMQ是基于主題(Topic)的發布/訂閱模式,而RabbitMQ則是基于隊列(Queue)的消息代理系統。 語言支持
RabbitMQ中的路由模型(direct)
路由模型 RabbitMQ 提供了五種不同的通信模型,上一篇文章中,簡單的介紹了一下RabbitMQ的發布訂閱模型模型。這篇文章來學習一下RabbitMQ中的路由模型(direct)。 路由模型
redis和rabbitMQ的區別
Redis和RabbitMQ是兩個流行的開源消息傳遞技術,用于構建高可靠、可擴展和可擴展的應用程序。雖然它們都用于實現消息傳遞機制,但它們在設計和運作方式上存在一些不同之處。在本文中,我們將詳細討論
rabbitmq高可用集群搭建
在進行RabbitMQ搭建時,我們基于現有的連接數據和業務需求進行了深入分析。目前的統計數據顯示,連接數為631,隊列數為80418。為了確保業務需求的順利滿足,我們需要在云產品和自建RabbitMQ消息隊列服務之間做出選擇。

評論