RabbitMQ的高级特性-限流

消息分发:

       RabbitMQ队列拥有多个消费者时, 队列会把收到的消息分派给不同的消费者. 每条消息只会发送给订阅列表⾥的⼀个消费者. 这种⽅式⾮常适合扩展, 如果现在负载加重,那么只需要创建更多的消费者来消费处理消息即可.


       默认情况下, RabbitMQ是以轮询的⽅法进⾏分发的, ⽽不管消费者是否已经消费并已经确认了消息. 这种⽅式是不太合理的, 试想⼀下, 如果某些消费者消费速度慢, ⽽某些消费者消费速度快, 就可能会导致某些消费者消息积压, 某些消费者空闲, 进⽽应⽤整体的吞吐量下降,可以这样解决:

答:使用channel.basicQos(int prefetchCount) ⽅法, 来限制当前信道上的消费者所能保持的最⼤未确认消息的数量⽐如: 消费端调⽤了 channelbasicQos(5) , RabbitMQ会为该消费者计数, 发送⼀条消息计数+1, 消费⼀条消息计数-1, 当达到了设定的上限, RabbitMQ就不会再向它发送消息了,直到消费者确认了某条消息.类似TCP/IP中的"滑动窗⼝".
注:prefetchCount 设置为0时表⽰没有上限.
       basicQos 对拉模式的消费⽆效

应⽤场景
消息分发的常⻅应⽤场景有如下:

1. 限流
2. ⾮公平分发

1、限流
如下使⽤场景:
       订单系统每秒最多处理5000请求, 正常情况下, 订单系统可以正常满⾜需求;但是在秒杀时间点, 请求瞬间增多, 每秒1万个请求, 如果这些请求全部通过MQ发送到订单系统, ⽆疑会把订单系统压垮

RabbitMQ提供了限流机制, 可以控制消费端⼀次只拉取N个请求
通过设置prefetchCount参数, 同时也必须要设置消息应答⽅式为⼿动应答
prefetchCount: 控制消费者从队列中预取(prefetch)消息的数量, 以此来实现流控制和负载均衡

配置prefetch参数,设置应答方式为手动应答

listener:
  simple:
    acknowledge-mode: manual #⼿动确认
    prefetch: 5

负载均衡
我们也可以⽤此配置,来实现"负载均衡"
如下图所⽰, 在有两个消费者的情况下,⼀个消费者处理任务⾮常快, 另⼀个⾮常慢,就会造成⼀个消费者会⼀直很忙, ⽽另⼀个消费者很闲. 这是因为 RabbitMQ 只是在消息进⼊队列时分派消息. 它不考虑消费者未确认消息的数量.

listener:
   simple:
     acknowledge-mode: manual #⼿动确认
     prefetch: 1

RabbitMQ具有一些高级特性,使其在消息队列系统中具有更强大的功能和灵活性。以下是一些常见的高级特性: 1. 死信队列(Dead Letter Exchange):RabbitMQ允许将无法被消费或处理的消息路由到特定的死信队列中。这对于处理异常情况或者无法处理的消息非常有用,可以进行后续的处理或者分析。 2. 延迟队列(Delayed Message Exchange):RabbitMQ支持通过插件或者自定义方式实现延迟队列,可以将消息延迟一段时间后再进行投递。这对于需要在特定时间点或者一定延迟后处理消息的场景非常有用。 3. 消息优先级(Message Priority):RabbitMQ允许为消息设置不同的优先级,确保高优先级的消息能够更快地得到处理。这对于处理紧急任务或者优先级较高的消息非常有用。 4. 消息确认机制(Message Acknowledgement):RabbitMQ支持消息确认机制,在消息被消费者成功处理后进行确认,确保消息不会丢失。这对于保证消息的可靠传递非常重要。 5. 消费者限流(Consumer Flow Control):RabbitMQ提供了消费者限流机制,可以控制消费者接收消息的速率,避免消息堆积和过载的情况发生。这对于保证系统的稳定性和性能非常重要。 6. 插件机制(Plugin System):RabbitMQ具有丰富的插件系统,可以通过安装和配置插件来增加新的功能和扩展性。例如,可以通过插件实现消息的压缩、加密、转换等扩展功能。 这些高级特性使得RabbitMQ成为一个强大而灵活的消息队列系统,适用于各种复杂的应用场景和需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值