成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

RabbitMQ非常實用技巧,動態調整消息并發處理能力

開發 前端
在 Spring Boot 中動態調整 RabbitMQ 消息監聽的并發數是一個重要的優化手段。通過合理設置并發數并根據系統負載情況進行動態調整,我們可以提高消息處理效率、節省系統資源、確保系統的穩定性和可靠性。

環境:SpringBoot2.7.16 + RabbitMQ3.8.35

1. 簡介

RabbitMQ 是一個開源的消息代理和隊列服務器,用于通過輕量級和可靠的消息傳遞,在服務器之間進行通信。在Spring Boot項目中我們一般都是通過@RabbitListener進行消息監聽。可以通過配置消息監聽器并發數來提高系統的消息處理能力。

在實際應用中,根據業務場景的不同,我們可能需要動態調整 RabbitMQ 消息監聽的并發數。例如,當RabbitMQ消息積壓過多時,這時候我們就可以考慮通過動態調整并發數,以提高消息處理速度;而在系統自身負載過高時,這時候可以考慮通過減少并發數來減輕系統的整體壓力。本篇文章將通過具體的示例來展示如何調整運行中消息監聽處理器的并發數。

注意:動態調整并發監聽數還可以幫助我們更好地控制系統的穩定性和可靠性。通過實時監測系統的負載情況和消息處理速度,我們可以及時發現潛在的問題并進行調整,從而確保系統的正常運行。

2. 實戰案例

2.1依賴管理

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2.2 配置管理

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
    virtualHost: test
    publisherConfirmType: correlated
    publisherReturns: true
    listener: 
      simple:
        # 手動應答
        acknowledgeMode: manual
        concurrency: 2
        max-concurrency: 2

2.3 創建交換機及隊列

通過管理界面創建交換機及隊列。

  • 交換機名:test.exchange類型為topic
  • 隊列名:   test
  • 將交換機與隊列進行綁定路由key:akf.#

2.4 消息隊列準備消息

通過如下接口,先往隊列中插入100條消息

@Resource
private RabbitTemplate rabbitTemplate ;


@GetMapping("/send")
public String send() {
  new Thread(() -> {
    for (int i = 0; i < 100; i++) {
      rabbitTemplate.convertAndSend("test.exchange", "akf.a", "message - " + i) ;
    }
  }).start() ;
  return "success" ;
}

圖片圖片

2.5 消息監聽器

@RabbitListener(queues = "test")
public void listener1(String message) {
  System.out.printf("%s - 接收到消息:%s%n", Thread.currentThread().getName(), message) ;
  try {
    TimeUnit.SECONDS.sleep(2) ;
  } catch (InterruptedException e) {}
}

2.6 測試

測試上面的消息監聽器是正常的

圖片圖片

2.7 調整并發數

在上一步的測試中我們發現控制臺打印的始終是一個線程在執行消息處理。但是在一開始的配置文件中我們將concurrency屬性設置的為2,起碼這里應該是2個線程交替執行才對,這是為什么呢?

Spring監聽RabbitMQ的消息時默認并不是一條一條的從RabbitMQ中去,是一次預期一批數據,這一批消費完后才進行下一批的獲取,默認預期250條。而我們向隊列中存入的數據才100條,所以控制臺中你只能看到一個線程打印,因為你沒有足夠的消息供其它線程去獲取處理。我們可以通過如下配置進行預期數的設置:

spring:
  rabbitmq:
    listener: 
      simple:
        prefetch: 5

重新啟動服務,測試如下

圖片圖片

2個線程交替執行;接下來該如何實現動態調整并發數呢?

首先,修改消息監聽器配置

@RabbitListener(id = "test-queue", queues = "test", ackMode = "AUTO")
public void listener1(String message) {
  // ...
}

id: 這里最好是設置唯一的id值,我們是要通過該id值來獲取當前隊列的消息監聽容器。ackMode: AUTO 這里設置的應答模式,用來覆蓋配置文件中的設置。

其次,通過RabbitListenerEndpointRegistry操作

@Resource
private RabbitListenerEndpointRegistry registry ;


@GetMapping("/modify/{count}")
public Object modify(@PathVariable("count") Integer count) {
  // 這里通過id獲取對應的隊列監聽器;所以上面一定要定義唯一的id值
  MessageListenerContainer listenerContainer = registry.getListenerContainer("test-queue") ;
  if (listenerContainer instanceof SimpleMessageListenerContainer container) {
    container.setConcurrentConsumers(count) ;
  }
  return String.format("并發接收消息:%d%n", count) ;
}

最后,測試。

首先將服務啟動,控制輸出如下(當前只有2個線程處理)

圖片圖片

目前只有2個線程。

調用上面的接口修改并發數為3個后,控制臺輸出。

圖片圖片

成功增加了一個消費者線程。

接下來再測試,如果修改的數量大于最大數(spring.rabbitmq.listener.simple.max-concurrency)

圖片圖片

控制臺拋出如下異常。

圖片圖片

不能超過最大數;再看看調小是否可以。

圖片圖片

可以動態調小。

我們也可以對消息監聽器進行暫停消費和重新啟動消息監聽,這里就不在演示了,非常簡單調用相應start/stop即可。

總結:在 Spring Boot 中動態調整 RabbitMQ 消息監聽的并發數是一個重要的優化手段。通過合理設置并發數并根據系統負載情況進行動態調整,我們可以提高消息處理效率、節省系統資源、確保系統的穩定性和可靠性。在實際應用中,我們應該根據具體的業務場景和需求來選擇合適的并發數調整策略,以達到最佳的性能和效果。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2024-05-22 09:29:43

2019-10-12 15:42:36

CSS代碼前端

2009-09-04 10:27:28

Linux實用技巧linux操作系統linux

2022-03-23 09:18:10

Git技巧Linux

2009-12-21 15:50:39

2023-07-24 07:11:43

2009-01-03 09:34:30

ASP.NET.NET性能優化

2011-04-08 15:40:01

Oracle認證

2022-11-03 10:28:59

PandasSAC機制

2022-10-11 08:00:47

多線程開發技巧

2024-05-17 08:52:43

SQL實用技巧行列轉換

2023-04-06 15:26:35

Java線程安全

2010-10-08 15:44:17

vim

2019-12-22 23:10:19

LinuxSSH加密

2009-12-09 11:21:30

Linux實用技巧

2019-11-25 10:12:59

Python技巧工具

2010-09-14 10:41:24

DIV+CSS排版

2009-12-23 17:32:35

Linux構建軟路由

2019-10-10 16:31:51

PyCharmPythonWindows

2022-09-15 07:05:09

Windows電腦技巧
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线免费视频 | 精品伊人久久 | 欧美一区二区三区日韩 | 我要看黄色录像一级片 | 欧美男人的天堂 | www.se91 | 婷婷开心激情综合五月天 | 一区在线视频 | 亚洲国产一区二区三区, | 日韩欧美中文 | 国产精品特级毛片一区二区三区 | 久久一区二区视频 | 午夜精品91 | 欧美8一10sex性hd | 91一区二区三区 | 国产区一区二区三区 | 亚洲精品二三区 | 国产视频2021| 亚洲电影一级片 | 美女在线一区二区 | 中文字幕二区三区 | 欧州一区二区 | 国产日韩欧美精品 | 91天堂网 | 成年人在线视频 | 亚洲精品国产电影 | 性国产丰满麻豆videosex | 日屁视频 | 成人精品毛片国产亚洲av十九禁 | 日日夜夜精品视频 | 国产精品久久久久久亚洲调教 | 天天草天天干天天 | 亚洲 成人 在线 | 午夜免费视频 | 久久亚洲一区 | 一区二区蜜桃 | 欧美日韩国产一区二区三区 | 免费成人在线网站 | 91精品国产乱码久久久久久久久 | 亚洲va欧美va天堂v国产综合 | 一呦二呦三呦国产精品 |