最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot集成RabbitMQ的過程之可靠性與性能提升的問題記錄

 更新時間:2025年05月13日 09:14:16   作者:愿你天黑有燈下雨有傘  
這篇文章主要介紹了Spring Boot集成RabbitMQ的過程之可靠性與性能提升的問題記錄,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

一、環(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 端口進行通信??梢酝ㄟ^瀏覽器訪問 http://localhost:15672(默認(rèn)用戶名和密碼是 guest/guest)來訪問 RabbitMQ 的管理界面,查看隊列、交換機等信息。

添加 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ù)器部署在其他機器上,需要將 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)機制配置 為了確保消息可靠地發(fā)送到 RabbitMQ 服務(wù)器,可以開啟消息確認(rèn)機制

spring.rabbitmq.publisher-confirms=true

當(dāng)消息成功發(fā)送到 RabbitMQ 服務(wù)器后,服務(wù)器會發(fā)送確認(rèn)消息給生產(chǎn)者。

三、生產(chǎn)者代碼實現(xiàn)

創(chuàng)建 RabbitMQ 配置類(可選)

如果需要自定義一些 RabbitMQ 的配置,如交換機、隊列等,可以創(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ù)表示是否持久化
    }
    // 定義交換機
    @Bean
    public DirectExchange myExchange() {
        return new DirectExchange("myExchange", true, false);
    }
    // 綁定隊列和交換機
    @Bean
    public Binding myBinding() {
        return BindingBuilder.bind(myQueue()).to(myExchange()).with("myRoutingKey");
    }
}

在這個例子中,定義了一個名為 myQueue 的隊列、一個名為 myExchange 的直連交換機(DirectExchange),并通過路由鍵 myRoutingKey 將隊列綁定到交換機。

創(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 的交換機,并指定路由鍵為 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)有消息到達該隊列時,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);
    }
}

在這個例子中,通過 ChannelbasicAck 方法手動確認(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)文章

  • idea項目中target文件提示拒絕訪問的解決

    idea項目中target文件提示拒絕訪問的解決

    這篇文章主要介紹了idea項目中target文件提示拒絕訪問的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 學(xué)習(xí)Java之File文件操作方法

    學(xué)習(xí)Java之File文件操作方法

    這篇文章我們主要學(xué)習(xí)如何實現(xiàn)IO流的具體操作,但很多時候,IO流都會操作一個文件,所以我們需要先學(xué)習(xí)在Java中如何操作文件,包括文件及文件夾的創(chuàng)建、遍歷、刪除等,有了文件操作的基礎(chǔ),我們才能更好地操作IO流,文中有詳細的代碼示例,需要的朋友可以參考下
    2023-09-09
  • mybatis和mybatis-plus同時使用的坑

    mybatis和mybatis-plus同時使用的坑

    本文主要介紹了mybatis和mybatis-plus同時使用的坑,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Java多線程 原子性操作類的使用

    Java多線程 原子性操作類的使用

    這篇文章主要介紹了Java多線程 原子性操作類的使用,在java5以后,我們接觸到了線程原子性操作,也就是在修改時我們只需要保證它的那個瞬間是安全的即可,經(jīng)過相應(yīng)的包裝后可以再處理對象的并發(fā)修改,本文總結(jié)一下Atomic系列的類的使用方法,下面一起進入文章了解詳細內(nèi)容
    2021-10-10
  • 使用Mybatis接收Integer參數(shù)的問題

    使用Mybatis接收Integer參數(shù)的問題

    這篇文章主要介紹了使用Mybatis接收Integer參數(shù)的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Flowable執(zhí)行完畢的流程查找方法

    Flowable執(zhí)行完畢的流程查找方法

    這篇文章主要為大家介紹了Flowable執(zhí)行完畢的流程查找方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 詳解Java中的final關(guān)鍵字

    詳解Java中的final關(guān)鍵字

    子類可以在父類的基礎(chǔ)上改寫父類內(nèi)容,為了避免這種隨意改寫的情況,Java提供了final 關(guān)鍵字,用于修飾不可改變內(nèi)容。本文就來詳細說說final關(guān)鍵字的使用,需要的可以參考一下
    2022-10-10
  • Java經(jīng)典面試題匯總:Spring

    Java經(jīng)典面試題匯總:Spring

    本篇總結(jié)的是Spring框架相關(guān)的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習(xí)生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • 輕松了解java中Caffeine高性能緩存庫

    輕松了解java中Caffeine高性能緩存庫

    本文我們將學(xué)習(xí)了解到用于Java的高性能緩存庫Caffeine,其使用Window TinyLfu清理策略,提供最佳的命中率
    2021-08-08
  • java案例實戰(zhàn)之字符串轉(zhuǎn)換為二進制

    java案例實戰(zhàn)之字符串轉(zhuǎn)換為二進制

    最近遇到個需求,要求編寫一個程序,從鍵盤錄入一個字符串,將字符串轉(zhuǎn)換為二進制數(shù),下面這篇文章主要給大家介紹了關(guān)于java字符串轉(zhuǎn)換為二進制的相關(guān)資料,需要的朋友可以參考下
    2023-06-06

最新評論

焦作市| 稻城县| 呈贡县| 永定县| 龙川县| 平安县| 阿勒泰市| 南平市| 海盐县| 丽江市| 临汾市| 定襄县| 轮台县| 普兰县| 尉犁县| 日喀则市| 民丰县| 红原县| 乐亭县| 湘潭市| 华容县| 泊头市| 筠连县| 尚志市| 深圳市| 彰化市| 通化市| 桂林市| 通道| 新泰市| 承德市| 兴宁市| 峨山| 洪江市| 且末县| 潍坊市| 万宁市| 马边| 新乡市| 韶关市| 登封市|