rabbitmq消费者获取消息慢_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 . 那么如何才能加快消费者吞吐量,以便消费者能够赶上 生产环境 者并避免队列中的消息溢出?我应该在消费者部分使用多线程来加快消费率吗?或者我应该使用多个消费者同时使用传入的消息?或者是否存在任何异步方式让消费者异步使用消息而不等待它完成?欢迎任何建议 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值