问题:公平转发
目前消息转发机制是平均分配,这样就会出现俩个消费者,奇数的任务很耗时,偶数的任何工作量很小,造成的原因就是近当消息到达队列进行转发消息。并不在乎有多少任务消费者并未传递一个应答给RabbitMQ。仅仅盲目转发所有的奇数给一个消费者,偶数给另一个消费者。
为了解决这样的问题,我们可以使用basicQos方法,传递参数为prefetchCount= 1。这样告诉RabbitMQ不要在同一时间给一个消费者超过一条消息。
换句话说,只有在消费者空闲的时候会发送下一条信息。
调度分发消息的方式,也就是告诉RabbitMQ每次只给消费者处理一条消息,也就是等待消费者处理完毕并自己对刚刚处理的消息进行确认之后,才发送下一条消息,防止消费者太过于忙碌,也防止它太过去清闲。
intprefetchCount = 1; channel.basicQos(prefetchCount); |
问题:持久化:
消息持久化在消息声明和通道发布的时候来声明他为持久化,同时在消费端声明的时候也需要声明为持久化。
没有持久化,重新启动RabbitMQ,发现没有了。
持久化之后,重新启动RabbitMQ,发现是有的,执行消费者,可以获取该消息。
|
代码是 从world中粘贴过来的,格式有点不好,请谅解!