如何rabbitMQ进行消费限速

简介: 如何rabbitMQ进行消费限速

限流场景下,生产者的速度>消费者的速度,如果我们按照ribbitMq的默认配置,能达到限速的效果么,答案是否定的

不禁就产生了以下几个疑问:

问题1:默认场景下rabbitMQ的消费方式是推还是拉呢?

问题2:需要哪些配置rabbitMQ才能实现限速效果呢?
问题3:消费端是单线程消费还是多线程消费呢,如何进行控制?
问题4:其他消息中间件又如何来实现的呢?
问题5:哪些场景适合推模式,哪些场景适合拉模式呢?

带着这些疑问,展开对rabbitMq的进一步的学习

问题1:默认场景下rabbitMQ的消费方式是推还是拉呢?

参考:

  1. RabbitMQ之Consumer消费模式(Push & Pull)
  2. 官网:Publish/Subscribe

了解到rabbitMq提供了push和pull两种实现方式:

1、push模式

基于DeliverCallback 回调函数,示例代码如下:

DeliverCallback deliverCallback = (consumerTag, delivery) -> {
    String message = new String(delivery.getBody(), "UTF-8");
    System.out.println(" [x] Received '" + message + "'");
};
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });

2、pull模式

pull模式主要是通过channel,basicGet方法来获取消息,示例代码如下:

GetResponse response = channel.basicGet(QUEUE_NAME, false);
System.out.println(new String(response.getBody()));
channel.basicAck(response.getEnvelope().getDeliveryTag(),false);

问题2:需要哪些配置rabbitMQ才能实现限速效果呢?

参考资料:

RabbitMQ channel.BasicQos

push模式

1、设置customer的ack模式为手动ack。

channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);

2、将手动ack的确认在业务完成以后

3、队列模型的当未ack数据达到一定数量时,会阻断后续消息得消费,达到限流得效果

pull模式

不手动拉取消息,那么消息就会堆积到消息中间件,也能达到限速的效果

问题3:消费端是单线程消费还是多线程消费呢,如何增加消费端得处理能力?

提升RabbitMQ消费速度的一些实践

参考文献:

RabbitMQ学习(五)消费端削峰限流

rabbitmq消费消息的模式

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
7月前
|
消息中间件 存储 运维
Rabbitmq消息大量堆积怎么办?
该文讨论了一个系统架构问题,主要涉及RabbitMQ在处理订单消息时遇到的性能瓶颈。首先,系统使用RabbitMQ是为了解耦和提高性能,前端创建订单后通过RabbitMQ发送消息给订单履约系统消费并执行后续操作。当订单流量激增时,消息堆积导致服务器压力增加。 排查解决方案: 1. 增加消费者以提高消费速度,但发现即使增加消费者,消息堆积问题仍未解决。 2. 分析消费者逻辑,发现调用库存系统接口可能导致处理速度慢。库存系统压力大,接口响应慢,加剧问题。 3. 实施清空堆积消息的策略,新建消费者快速消费消息并存储在表中,减轻服务器压力。待库存服务恢复后,再将消息推回RabbitMQ处理。
344 1
|
消息中间件 存储 Java
《RabbitMQ》| 解决消息延迟和堆积问题
本文主要介绍 RabbitMQ的常见问题
883 1
|
5月前
|
消息中间件 Java 测试技术
消息队列 MQ使用问题之数据流出规则是否支持平台的云RabbitMQ
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 API 开发工具
消息队列 MQ使用问题之如何开启RabbitMQ的MQTT功能
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件
RabbitMQ 死信消息队列 重复消费 basicAck basicNack
RabbitMQ 死信消息队列 重复消费 basicAck basicNack
|
7月前
|
消息中间件
RabbitMQ 实现消息队列延迟
RabbitMQ 实现消息队列延迟
190 0
|
7月前
|
消息中间件 Shell 数据库
RabbitMQ之延迟消息
RabbitMQ之延迟消息
119 0
|
消息中间件 测试技术
RabbitMQ消费端并发和限流设置
RabbitMQ消费端并发和限流设置
1164 0
|
消息中间件
『RabbitMQ』通过死信队列实现延时消费功能
📣读完这篇文章里你能收获到 - 延时队列的应用场景介绍 - RabbitMQ通过TTL+DLX 实现定时任务
250 1
『RabbitMQ』通过死信队列实现延时消费功能
|
消息中间件 数据安全/隐私保护
它让你1小时精通RabbitMQ消息队列(新增死信处理)
它让你1小时精通RabbitMQ消息队列(新增死信处理)
357 0
它让你1小时精通RabbitMQ消息队列(新增死信处理)