调优配置

吞吐量

1、消费者数量

最简单的提高消费端吞吐量的方式就是增加消费者数量。

properties

# 初始/最少/空闲时 消费者数量。默认1
spring.cloud.stream.bindings.<channelName>.consumer.concurrency=[Integer]

yaml

spring:
  cloud:
    stream:
      # 消息中间件绑定配置:BindingProperties
      bindings:
        sms-input:
          # 指定要使用的 Exchange 名称
          destination: ramq.sms.topic
          #设置消息类型
          content-type: application/json
          #设置消息的组名称(同名组中的多个消费者,只会有一个去消费消息.)
          group: group1
          # 消费者配置:ConsumerProperties
          consumer:
            # 初始/最少/空闲时 消费者数量。默认1
            concurrency: 1

动态增加消费者:应用启动时创建的消费者数量可能只是暂时的,并不是最终的数量。

2、弹性的消费者数量

增加消费者数量,但具体增加到多少是很难确定的,因为各种各样的因素都会导致消费者数量冗余或不足,比如在用户访问高峰期,消费者数量肯定需要比较多,而在平时或凌晨,访问量降到低谷,消费者数量肯定就冗余了,甚至,一个队列只在某个定时任务才会用到,那么在平时多消费者基本就只有占用系统资源的作用了。

properties

# 弹性  queue的消费者的最大数量,默认:1
# 当前消费者数量不足以及时消费消息时, 会动态增加消费者数量, 直到到达最大数量, 即该配置的值.
spring.cloud.stream.rabbit.bindings.<channelName>.consumer. maxConcurrency=[Integer]

yaml

spring:
  cloud:
    stream:
      # 消息中间件绑定配置:BindingProperties
      bindings:
        sms-input:
          # 指定要使用的 Exchange 名称
          destination: ramq.sms.topic
          #设置消息类型
          content-type: application/json
          #设置消息的组名称(同名组中的多个消费者,只会有一个去消费消息.)
          group: group1
          # 消费者配置:ConsumerProperties
          consumer:
            # 最大消费者数量。默认1
            max-concurrency: 1

如果不增加消费者数量的话,而消息发布的吞吐量又居高不下,该怎么办呢?实际上,增加消费者数量,其最终目的就是提升消费端的消费力,那我们可以从别的方式入手,比如增加应用实例数量,其实这也是另一种增加消费者数量的方式,只是在其他机器而已;而如果暂时没有增加机器的预算,那么可以考虑批量消费数据

3、一次性批量消费

spring-cloud-stream 并不支持 轮询的 批量分发模式(虽然简单,但存在很大的隐患:系统资源(特别是堆内存)被浪费);

另一种被支持的 批量分发模式 —— 公平分发:消费快的,分担多一点,量力而行(消费者每次只从队列获取一定数量的消息,当所有消息消费完了,再接着从队列获取相同数量的消息。

这样一来,消费快的消费者,向队列获取消息的频率就高,反之,频率就低)

properties

# 限制consumer在消费消息时,一次能同时获取的消息数量,默认:1。
spring.cloud.stream.rabbit.bindings.<channelName>.consumer.prefetch=[Integer]

yaml

spring:
  cloud:
    stream:
      # Rabbit 消息中间件专属配置:RabbitExtendedBindingProperties
      rabbit:
        # Rabbit消息中间件绑定配置:RabbitBindingProperties
        bindings:
          sms-input:
            # 消费者配置:RabbitConsumerProperties
            consumer:
              # 限制consumer在消费消息时,一次能同时获取的消息数量,默认:1
              prefetch: 1
作者:Jeebiz  创建时间:2023-04-04 16:56
最后编辑:Jeebiz  更新时间:2024-09-23 10:03