Spring Boot集成RabbitMQ的過程之可靠性與性能提升的問題記錄
一、環(huán)境準(zhǔn)備
安裝 RabbitMQ
- 在官網(wǎng)上下載對應(yīng)操作系統(tǒng)的安裝包(如 Windows、Linux 等),按照安裝向?qū)瓿砂惭b。
- 安裝完成后,啟動 RabbitMQ 服務(wù)。在 Windows 系統(tǒng)下,可以在服務(wù)列表中找到 RabbitMQ Server 并啟動;在 Linux 系統(tǒng)下,可以通過命令行啟動,例如使用
systemctl start rabbitmq-server(具體命令可能因 Linux 發(fā)行版而異)。 - 默認(rèn)情況下,RabbitMQ 使用 5672 端口進(jìn)行通信??梢酝ㄟ^瀏覽器訪問
http://localhost:15672(默認(rèn)用戶名和密碼是 guest/guest)來訪問 RabbitMQ 的管理界面,查看隊列、交換機(jī)等信息。
添加 Spring Boot 依賴
在 Spring Boot 項目的 pom.xml 文件中添加 RabbitMQ 相關(guān)依賴。例如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>這個依賴會自動引入 RabbitMQ 的客戶端庫以及 Spring AMQP(高級消息隊列協(xié)議)相關(guān)的模塊,方便我們在 Spring Boot 中操作 RabbitMQ。
二、配置 RabbitMQ
在 application.properties 或 application.yml 文件中配置
application.properties 示
spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest
這里配置了 RabbitMQ 服務(wù)器的地址、端口以及登錄的用戶名和密碼。如果 RabbitMQ 服務(wù)器部署在其他機(jī)器上,需要將 localhost 替換為對應(yīng)的 IP 地址。
application.yml 示例
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest高級配置(可選)
連接池配置 如果應(yīng)用需要頻繁地與 RabbitMQ 交互,可以通過配置連接池來提高性能。例如
spring.rabbitmq.listener.simple.concurrency=3 spring.rabbitmq.listener.simple.max-concurrency=10
這里設(shè)置了消費者線程池的最小線程數(shù)為 3,最大線程數(shù)為 10,可以根據(jù)實際業(yè)務(wù)需求調(diào)整這些參數(shù)。
消息確認(rèn)機(jī)制配置 為了確保消息可靠地發(fā)送到 RabbitMQ 服務(wù)器,可以開啟消息確認(rèn)機(jī)制
spring.rabbitmq.publisher-confirms=true
當(dāng)消息成功發(fā)送到 RabbitMQ 服務(wù)器后,服務(wù)器會發(fā)送確認(rèn)消息給生產(chǎn)者。
三、生產(chǎn)者代碼實現(xiàn)
創(chuàng)建 RabbitMQ 配置類(可選)
如果需要自定義一些 RabbitMQ 的配置,如交換機(jī)、隊列等,可以創(chuàng)建一個配置類。例如
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
// 定義隊列
@Bean
public Queue myQueue() {
return new Queue("myQueue", true); // 第二個參數(shù)表示是否持久化
}
// 定義交換機(jī)
@Bean
public DirectExchange myExchange() {
return new DirectExchange("myExchange", true, false);
}
// 綁定隊列和交換機(jī)
@Bean
public Binding myBinding() {
return BindingBuilder.bind(myQueue()).to(myExchange()).with("myRoutingKey");
}
}在這個例子中,定義了一個名為 myQueue 的隊列、一個名為 myExchange 的直連交換機(jī)(DirectExchange),并通過路由鍵 myRoutingKey 將隊列綁定到交換機(jī)。
創(chuàng)建生產(chǎn)者類
使用 RabbitTemplate 來發(fā)送消息。例如:
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class RabbitMQProducer {
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendMessage(String message) {
rabbitTemplate.convertAndSend("myExchange", "myRoutingKey", message);
}
}在這個例子中,通過調(diào)用 sendMessage 方法,將消息發(fā)送到名為 myExchange 的交換機(jī),并指定路由鍵為 myRoutingKey。RabbitMQ 會根據(jù)路由鍵將消息路由到對應(yīng)的隊列。
四、消費者代碼實現(xiàn)
創(chuàng)建消費者類
使用 @RabbitListener 注解來監(jiān)聽隊列中的消息。例如:
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class RabbitMQConsumer {
@RabbitListener(queues = "myQueue")
public void receiveMessage(String message) {
System.out.println("Received message: " + message);
}
}在這個例子中,RabbitListener 注解指定了要監(jiān)聽的隊列名為 myQueue。當(dāng)有消息到達(dá)該隊列時,receiveMessage 方法會被調(diào)用,并打印接收到的消息。
手動確認(rèn)消息(可選)
默認(rèn)情況下,Spring Boot 使用自動確認(rèn)模式,即消費者接收到消息后,RabbitMQ 會自動認(rèn)為消息已被成功處理。如果需要手動確認(rèn)消息,可以在配置類中設(shè)置:
spring.rabbitmq.listener.simple.acknowledge-mode=manual
然后在消費者代碼中,通過 Channel 手動確認(rèn)消息:
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
import com.rabbitmq.client.Channel;
@Component
public class RabbitMQConsumer {
@RabbitListener(queues = "myQueue")
public void receiveMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws Exception {
System.out.println("Received message: " + message);
// 手動確認(rèn)消息
channel.basicAck(tag, false);
}
}在這個例子中,通過 Channel 的 basicAck 方法手動確認(rèn)消息。如果消息處理失敗,可以調(diào)用 basicNack 方法拒絕消息。
五、測試
啟動項目
啟動 Spring Boot 項目,確保 RabbitMQ 服務(wù)也在運行。
發(fā)送消息
在代碼中調(diào)用生產(chǎn)者類的 sendMessage 方法,發(fā)送一條消息。例如:
@SpringBootApplication
public class RabbitMQApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(RabbitMQApplication.class, args);
RabbitMQProducer producer = context.getBean(RabbitMQProducer.class);
producer.sendMessage("Hello, RabbitMQ!");
}
}查看消費者輸出
觀察消費者類的控制臺輸出,確認(rèn)是否成功接收到消息。如果一切正常,應(yīng)該能看到類似以下的輸出:
Received message: Hello, RabbitMQ!
通過以上步驟,就可以完成 Spring Boot 整合 RabbitMQ 的基本操作,實現(xiàn)消息的發(fā)送和接收。
到此這篇關(guān)于Spring Boot集成RabbitMQ的過程之可靠性與性能提升的文章就介紹到這了,更多相關(guān)Spring Boot集成RabbitMQ內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于springboot-starter-undertow和tomcat的區(qū)別說明
這篇文章主要介紹了關(guān)于springboot-starter-undertow和tomcat的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
springboot使用maven實現(xiàn)多環(huán)境運行和打包問題
這篇文章主要介紹了springboot使用maven實現(xiàn)多環(huán)境運行和打包問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringBoot+Thymeleaf+ECharts實現(xiàn)大數(shù)據(jù)可視化(基礎(chǔ)篇)
本文主要介紹了SpringBoot+Thymeleaf+ECharts實現(xiàn)大數(shù)據(jù)可視化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>2022-06-06
Java將不同的List集合復(fù)制到另一個集合常見的方法
在Java中,有時候我們需要將一個List對象的屬性值復(fù)制到另一個List對象中,使得兩個對象的屬性值相同,這篇文章主要介紹了Java將不同的List集合復(fù)制到另一個集合常見的方法,需要的朋友可以參考下2024-09-09
spring-security關(guān)于hasRole的坑及解決
這篇文章主要介紹了spring-security關(guān)于hasRole的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09

