成人免费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-04-06 15:26:35

Java線程安全

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實用技巧行列轉換

2019-11-25 10:12:59

Python技巧工具

2010-09-14 10:41:24

DIV+CSS排版

2010-10-08 15:44:17

vim

2019-12-22 23:10:19

LinuxSSH加密

2009-12-09 11:21:30

Linux實用技巧

2009-12-23 17:32:35

Linux構建軟路由

2019-10-10 16:31:51

PyCharmPythonWindows

2022-05-30 09:01:13

CSS技巧前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99精品在线 | 在线视频日韩 | 午夜精品一区二区三区在线观看 | 午夜在线 | 这里精品 | 亚洲国产第一页 | 婷婷色成人 | 福利国产| 在线观看成年视频 | 男女黄网站 | 黄a大片| 成人免费视频一区 | 美女黄网站视频免费 | 一区二区三区不卡视频 | 一区二区av在线 | 国产精品视屏 | 亚洲欧美一区二区三区国产精品 | 国产精品五月天 | 国产精品污www一区二区三区 | 欧美视频免费在线 | 午夜精品福利视频 | 黑人一级片视频 | 成人亚洲精品久久久久软件 | 91国产精品 | 成人老司机 | 国产精品久久国产精品 | 韩三级在线观看 | 久久的色| 91在线看 | 国产成人精品一区二区三区四区 | 国产成人精品一区二区三 | 久久久一区二区三区 | 免费在线播放黄色 | 一二三四在线视频观看社区 | 午夜播放器在线观看 | 久久久精品视频一区二区三区 | 精品影院| 欧美xxxx色视频在线观看免费 | 伦理二区 | 国产一二区视频 | yiren22综合网成人 |