我有一个应用程序使用RabbitMQ作为消息队列来发送/接收两个组件之间的消息:发送者和接收者。发送者以非常快的方式发送消息。接收器接收到该消息,然后执行一些非常耗时的任务(主要是为非常大的数据大小编写数据库)。由于接收者需要很长时间才能完成任务,然后检索队列中的下一条消息,因此发送者将会继续快速填充队列。所以我的问题是:这会导致消息队列溢出吗?RabbitMQ:快速生产者和慢速消费者

的消息消费者看起来如下:

public void onMessage() throws IOException, InterruptedException {

channel.exchangeDeclare(EXCHANGE_NAME, "fanout");

String queueName = channel.queueDeclare("allDataCase", true, false, false, null).getQueue();

channel.queueBind(queueName, EXCHANGE_NAME, "");

QueueingConsumer consumer = new QueueingConsumer(channel);

channel.basicConsume(queueName, true, consumer);

while (true) {

QueueingConsumer.Delivery delivery = consumer.nextDelivery();

String message = new String(delivery.getBody());

System.out.println(" [x] Received '" + message + "'");

JSONObject json = new JSONObject(message);

String caseID = json.getString("caseID");

//following takes very long time

dao.saveToDB(caseID);

}

}

消费者收到的每条消息都含有caseID。对于每个caseID,它会将大量数据保存到数据库,这需要很长时间。目前只有一个消费者为RabbitMQ设置,因为生产者/消费者使用相同的队列来发布/订阅caseID。那么如何加快消费者吞吐量,让消费者赶上生产者并避免队列中的消息溢出?我应该在消费者部分使用多线程来加快消费速度吗?还是应该使用多个消费者同时使用收到的消息?或者是否有任何异步方式让消费者异步使用消息而不等待完成?欢迎任何建议。

2014-10-28

tonga

rabbitmq消费者获取消息慢_RabbitMQ:快速生产者和慢速消费者相关推荐

  1. rabbitmq基础10——消息追踪、Shovel插件的web端使用和命令使用

    文章目录 一.消息追踪 1.1 Firehose功能 1.1.1 开启与关闭 1.1.2 测试 1.1.3 总结 1.2 rabbitmq_tracing 插件 1.2.1 定义trace规则 1.2 ...

  2. rabbitmq几种工作模式_RabbitMQ六种队列模式-简单队列模式

    在官网的教程中,描述了如上六类工作队列模式: 简单队列模式:最简单的工作队列,其中一个消息生产者,一个消息消费者,一个队列.也称为点对点模式. 工作模式:一个消息生产者,一个交换器,一个消息队列,多个 ...

  3. 2.RabbitMQ 的可靠性消息的发送

      本篇包含 1. RabbitMQ 的可靠性消息的发送 2. RabbitMQ 集群的原理与高可用架构的搭建 3. RabbitMQ 的实践经验   上篇包含 1.MQ 的本质,MQ 的作用 2.R ...

  4. 生产者消费者_【线程通信】生产者消费者模型

    1生产者消费者模型介绍 生产者消费者模型,是每一个学习多线程的的人都需要知道的模型; 大致情况就是:有两个线程,一个负责生产产品,一个消费产品,两者公用同一块内存区域,也就是产品放在了同一块内存上面, ...

  5. java实现rabbitmq路由模型(routing/topic queues), 生产者 消费者 交换机 消息队列

    在fanout模型中,一条消息会被所有订阅的队列消费,即绑定了对应交换机的消费者,都能收到消息.但在某些场景下,我们希望不同的消息发送到不同的队列,被不同的消费者消费,此时就要用到Direct类型的交 ...

  6. java实现rabbitmq任务模型(work queues), 生产者 消费者 消息队列 能者多劳

    work queues也成为task queues,任务模型.当消息处理比较耗时的时候,可能生产消息的速度远远大于消费速度,长此以往,消息就会堆积,无法及时处理.此时,就恶意使用work模型,让多个消 ...

  7. RabbitMQ学习(七)_RabbitMQ Consumer获取消息的两种方式(poll,subscribe)解析

    RabbitMQ中consumer通过建立到queue的连接,创建channel对象,通过channel通道获取message, Consumer可以声明式的以API轮询poll的方式主动从queue ...

  8. rabbitmq如何保证消息不丢失_RabbitMQ的去重与防止消息的丢失

    Rabbitmq作为高并发的消息中间件,本文不在阐述基础概念.旨在分析与提供解决消息的丢失与重复的解决思路. RabbitMQ架构流程图 根据以上架构图,要明白消息走向的整个流程,生产者发送消息--& ...

  9. rocketmq新扩容的broker没有tps_深入研究RocketMQ消费者是如何获取消息的

    前言 小伙伴们,国庆都过的开心吗?国庆后的第一个工作日是不是很多小伙伴还沉浸在假期的心情中,没有工作状态呢? 那王子今天和大家聊一聊RocketMQ的消费者是如何获取消息的,通过学习知识来找回状态吧. ...

最新文章

  1. 函数计算自动化运维实战2 -- 事件触发 eip 自动转移
  2. docker mysql编辑器_docker官方mysql镜像自定义配置详解
  3. 云科技网络验证源码_面向虚拟化架构和容器云的开源安全工具
  4. 高德JS依赖分析工程及关键原理
  5. 经典面试题:如何保证缓存与数据库的双写一致性?
  6. leetcode__Longest Substring Without Repeating Characters
  7. react 引入html文件_React最快速上手教程
  8. java画图中运用缓冲解决屏幕闪烁方案二
  9. 中国电信运营商布局云计算“赛道”面临三大挑战
  10. ElasticSearch之QueryDSL查询语法
  11. JavaScript设计模式:四、发布订阅模式
  12. 模拟斗地主洗牌发牌,并对已发好的拍进行排序(红桃A,方块A, 黑桃2.......)
  13. Hinton最新访谈丨他如何看待谷歌胶囊网络专利、神经科学以及下一代AI?
  14. Android检测手机是否安装app
  15. 停止无效学习,4种高效学习方法,快速提升自己
  16. 百度,谷歌,360,神马,必应,搜狗搜索引擎网站链接提交入口
  17. 解决问题记录4:kettle数据库连接报错时区问题
  18. 如何从 SQL Server 中的 SELECT 更新?
  19. 英伟达发布 532.03 驱动,为新游戏和新显卡带来支持
  20. 如何在VB.NET中查询所有打印机端口名称,端口号ne

热门文章

  1. 使用RMAN对数据文件进行恢复
  2. python 打印输出xml数据问题
  3. Powershell创建数组
  4. Apache ActiveMQ教程
  5. linux下实现web数据同步的四种方式(性能比较)
  6. ##API(一)————枚举
  7. GDKOI2018游记
  8. centos下安装JDK8的方法
  9. linux命令——scp 两台linux机器间文件或目录传输
  10. Griffon 1.1 发布,Groovy 开发框架