2023年再不會RabbitMQ,就要被淘汰了,手把手帶你飛
來源:哪吒程式設計
大家好,我是哪吒。
Spring Cloud是一個開源框架,用於構建基於微服務架構的應用程式。它提供了多種工具和技術,用於實現各種微服務模式,並使它們易於管理和部署。
MQ(訊息佇列)則是一種重要的非同步通訊機制,用於在不同的應用程式之間進行通訊。
在本篇部落格中,我們將詳細講解如何使用Spring Cloud搭建MQ。
一、什麼是Spring Cloud?
Spring Cloud是一個基於Spring Framework的開源框架,用於構建基於微服務架構的應用程式。它為開發人員提供了一套工具和技術,可以輕鬆地實現和管理各種微服務模式。
Spring Cloud提供了各種解決方案,包括服務發現、配置管理、負載均衡、斷路器、API閘道器等,使得開發人員能夠輕鬆地建立和管理微服務。
上圖說明了以下過程:
客戶端(Client)向EurekaServer註冊微服務; 客戶端從ConfigServer獲取其配置; 客戶端向目標微服務(Service)傳送請求; 服務端在ZipkinServer生成跟蹤ID並將其返回給客戶端; 服務端處理請求,並將跟蹤ID傳送回客戶端; 客戶端接收到響應並完成請求。
二、什麼是MQ?
MQ(訊息佇列)是一種重要的非同步通訊機制,用於在不同的應用程式之間進行通訊。
它允許應用程式之間的非同步通訊,可以提高應用程式的可伸縮性和可靠性。
MQ通常由生產者、消費者和訊息佇列組成,其中生產者將訊息傳送到訊息佇列,消費者從訊息佇列中接收訊息並對其進行處理。
MQ還提供了一些高階功能,如訊息永續性、事務支援、訊息路由和過濾器等。
生產者和消費者之間的互動過程:
生產者透過交換器將訊息傳送到RabbitMQ,RabbitMQ將訊息傳送到佇列,消費者從佇列中獲取訊息並處理它。
最後,RabbitMQ將訊息傳送給消費者。
三、使用Spring Cloud搭建MQ
1、準備工作
在開始搭建MQ之前,我們需要進行一些準備工作。
首先,我們需要安裝RabbitMQ伺服器,並確保其已啟動。
其次,我們需要確保已安裝Spring Boot和Spring Cloud,並已將它們新增到專案依賴中。
最後,我們需要建立一個Spring Boot專案,以便我們可以開始編寫程式碼。
2、新增依賴項
在開始編寫程式碼之前,我們需要新增一些必要的依賴項。在pom.xml檔案中新增以下依賴項:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
這將使我們能夠使用Spring Cloud Stream,它是Spring Cloud用於構建訊息驅動微服務的解決方案。
3、配置RabbitMQ
在我們可以開始使用RabbitMQ之前,我們需要配置它。我們可以在application.properties檔案中新增以下屬性:
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
這些屬性指定了RabbitMQ伺服器的主機名、埠號、使用者名稱和密碼。
4、建立生產者
現在我們已經準備好了,我們可以開始編寫程式碼了。
首先,我們將建立一個生產者,它將傳送訊息到RabbitMQ訊息佇列。
以下是一個簡單的生產者實現:
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class Producer implements CommandLineRunner {
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void run(String... args) throws Exception {
String message = "Hello RabbitMQ!";
rabbitTemplate.convertAndSend("myExchange", "myRoutingKey", message.getBytes());
System.out.println("Sent message: " + message);
}
}
在這個例子中,我們使用了Spring Boot的CommandLineRunner
介面來定義我們的生產者。
在run()方法中,我們使用RabbitTemplate
來傳送訊息到名為"myExchange"的交換器,並使用myRoutingKey路由鍵
。我們還列印了傳送的訊息以供參考。
5、建立消費者
接下來,我們將建立一個消費者,它將從RabbitMQ訊息佇列中接收訊息並對其進行處理。以下是一個簡單的消費者實現:
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class Consumer {
@RabbitListener(queues = "myQueue")
public void processMessage(byte[] message) {
String text = new String(message);
System.out.println("Received message: " + text);
}
}
在這個例子中,我們使用了Spring Boot的RabbitListener註解來定義我們的消費者。processMessage()方法將接收到的位元組陣列轉換為字串,並列印出接收到的訊息。
6、配置訊息佇列
在我們可以測試我們的生產者和消費者之前,我們需要配置訊息佇列。在Spring Boot中,我們可以使用註解來定義訊息佇列。以下是我們需要在應用程式中新增的註解:
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
@Bean
public Queue myQueue() {
return new Queue("myQueue", false);
}
}
在這個例子中,我們使用了@Configuration
註解來定義我們的配置類。我們還使用@Bean註解來定義名為myQueue
的訊息佇列。
7、測試應用程式
現在我們已經完成了所有的設定和配置,可以測試我們的應用程式了。執行應用程式並檢查控制檯輸出,確保生產者已成功傳送訊息並且消費者已成功接收並處理訊息。
四、高階配置
Spring Cloud還提供了一些高階配置選項,可以幫助我們更好地管理和控制訊息佇列。例如,我們可以使用以下註解來定義交換器和路由鍵:
1、交換器的定義和使用
在Spring Cloud中,交換器是用於將訊息路由到正確的佇列的元件。交換器將收到的訊息根據規則進行路由,並將其傳送到匹配的佇列。
下圖,展示了定義交換器的過程:
在Spring Boot應用程式中,我們可以使用ExchangeBuilder來建立交換器。
下圖展示了交換器的使用過程:
上圖說明了以下過程:
生產者向交換器傳送訊息。 交換器根據規則將訊息路由到佇列1和佇列2。 佇列1將確認訊息傳送給交換器。 交換器將確認訊息傳送給生產者,告訴它訊息已經成功路由到了佇列。
在這個例子中,我們將使用Spring Cloud的ExchangeBuilder
來建立一個名為myExchange的直接交換器:
@Bean
public Exchange myExchange() {
return ExchangeBuilder.directExchange("myExchange").durable(true).build();
}
在這個例子中,我們使用了@Bean註解來定義名為"myExchange"的直接交換器。我們還使用了durable(true)選項來使交換器持久化,這樣即使在RabbitMQ伺服器關閉後也能保留交換器。
2、定義佇列
以下是建立兩個佇列的示例程式碼,一個用於普通訊息,一個用於重要訊息:
在程式碼中,我們使用了 @Bean
註解來定義 myQueue
和 importantQueue
兩個佇列。我們將 durable
引數設定為 false
,這表示佇列是非持久化的,當 RabbitMQ 伺服器關閉時,佇列中的訊息將會丟失。
@Bean
public Queue myQueue() {
return new Queue("myQueue", false);
}
@Bean
public Queue importantQueue() {
return new Queue("importantQueue", false);
}
透過使用這些佇列,我們可以將訊息傳送到相應的佇列並讓消費者從佇列中接收訊息。
3、定義繫結
在這個例子中,我們將定義繫結,將交換器和佇列連線起來。以下是我們需要在應用程式中新增的註解:
@Bean
public Binding myBinding() {
return BindingBuilder.bind(myQueue()).to(myExchange()).with("myRoutingKey").noargs();
}
@Bean
public Binding importantBinding() {
return BindingBuilder.bind(importantQueue()).to(myExchange()).with("importantRoutingKey").noargs();
}
在這個例子中,我們使用了@Bean註解來定義名為"myBinding"和"importantBinding"的兩個繫結。我們還使用了with()選項來指定路由鍵,以便將訊息傳送到正確的佇列。
應用程式首先新增了繫結的註解,然後繫結將佇列和交換器連線起來。繫結還指定了路由鍵,以便將訊息傳送到正確的佇列。
一旦繫結成功,應用程式就可以向交換器傳送訊息。交換器會根據路由鍵將訊息路由到正確的佇列中。佇列最後將訊息傳送回應用程式,應用程式收到訊息並處理。
4、配置RabbitMQ連線
在這個例子中,我們還需要配置RabbitMQ連線,以便我們的應用程式可以與RabbitMQ伺服器通訊。以下是我們需要在應用程式中新增的屬性:
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
在這個例子中,我們使用了Spring Boot的屬性檔案來配置RabbitMQ連線。我們指定了RabbitMQ伺服器的主機名、埠號、使用者名稱和密碼。
5、測試應用程式
現在我們已經完成了所有的設定和配置,可以測試我們的應用程式了。執行應用程式並檢查控制檯輸出,確保生產者已成功傳送訊息並且消費者已成功接收並處理訊息。還要確保訊息已正確地路由到相應的佇列中。
五、總結
在本文中,我們介紹了RabbitMQ作為訊息代理的基本概念,包括交換器、佇列、繫結和路由鍵等。
我們還介紹了Spring Boot如何與RabbitMQ整合,並使用Spring Cloud Stream來簡化訊息傳輸和處理過程。
在程式碼示例中,我們展示瞭如何建立生產者和消費者,並使用註解來定義交換器、佇列和繫結。我們還演示瞭如何配置RabbitMQ連線,並測試了應用程式的正確性和可靠性。
總的來說,本文是一個入門級別的指南,希望能夠幫助讀者更好地理解和應用Spring Cloud和訊息佇列技術。如果您想深入學習和了解更多高階主題,可以參考官方文件和其他線上資源。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024922/viewspace-2943771/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 超火的個性化推薦你再不會就OUT啦,讓飛槳手把手來教你
- 再不學程式設計,你就成文盲了程式設計
- 再不學程式設計 你就成文盲了程式設計
- 資料分析的黃金時期,你再不會就晚了!
- Swift Protobuf 初探 —— 繼 XML 後,JSON 也要被淘汰了嗎SwiftXMLJSON
- 大資料時代,再不學習就OUT了大資料
- RabbitMQ的 RPC 訊息模式你會了嗎?MQRPC模式
- 當你學會炒菜的時候,你就學會了大資料大資料
- 【零基礎】帶你學C帶你飛
- 手機儲存晶片eMMC要被淘汰了?國產eMMC:扶我起來我還能打晶片
- 【RabbitMQ】一文帶你搞定RabbitMQ延遲佇列MQ佇列
- 炸裂!MySQL 82 張圖帶你飛MySql
- Spring Cache 帶你飛(二)Spring
- Spring Cache 帶你飛(一)Spring
- 看完這篇 Linux 的基本操作你就會了!Linux
- 再不瞭解PostgreSQL,你就晚了之PostgreSQL主從流複製部署SQL
- 2019年12道RabbitMQ高頻面試題你都會了嗎?(含答案解析)MQ面試題
- 過兩年 JVM 可能就要被 GraalVM 替代了JVMLVM
- 程式設計師 再不減壓你會得精神病!程式設計師
- TikTok最全帶貨引流教程,學會你就爆賣全球?
- 學會以下幾個軟體你就會3D遊戲模型了3D遊戲模型
- 再不用ContraintLayout就out啦AI
- 手把手帶你解析Handler原始碼原始碼
- 手把手帶你玩轉LinuxLinux
- 全網最全RabbitMQ總結,別再說你不會RabbitMQMQ
- 2020 還不會泡 Github 你就落伍了Github
- 搞懂了這幾點,你就學會了Web程式設計Web程式設計
- 帶你玩轉RabbitMQ的五種佇列MQ佇列
- 前端最全面試答案,再不收藏就晚了~前端面試
- 不會用RabbitMQ實戰?來,一文帶你操作介面管理和監控MQ
- 手把手帶你入門 Spring Security!Spring
- 手把手帶你快速上手香橙派AIproAI
- 都9102年了還不懂動態圖嗎?一文帶你瞭解飛槳動態圖
- Spring Boot面試中的一個精髓註解,不會就給淘汰Spring Boot面試
- 手把手帶你擼一個路由(2)--帶參跳轉路由
- LaravelS - 基於 Swoole 加速 Laravel/Lumen - 帶你飛 ?Laravel
- MySQL每秒57萬的寫入_帶你飛MySql
- 再不遷移到Material Design Components 就out啦Material Design