rabbitmq一个队列7个消费者,每个消费则者都是排他性的,影响正常消费么?
不影响。
以下答案引用自GPT-3大模型,请合理使用:
在rabbitmq中,队列7个消费者,每个消费者都是排他性的,不会影响正常消费。
其消费者设计原则如下:
1、每个消费者生成一个随机的消息标签,而消费者标签是排他的;
2、每次仅处理一条消息,如果未完成消息处理,将消息标记为“未完成”,再次请求时只要继续处理就可以了;
3、每个消费者通过消息标签向队列中请求消息,即消息标签是排他的,它只能把消息发送给自己;
4、消费者在完成一条消息的处理,引擎会自动将这条消息从队列中删除;
5、在此过程中,如果消息标签未完成,但队列中的消息被其他消费者完成,队列没有后续的消息可以发给消费者;
6、如果消费者连接断开,那么这条消息依然留在队列中,当其他消费者获取到这条消息时,可以自行完成处理,因此不会影响正常消费。
以下是实现上述过程的代码:
// 使用channel连接到RabbitMQ,得到一个Channel对象
Channel channel = connection.createChannel();
// 声明一个队列,并且使用非排他模式声明
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 设置最大服务转发消息数量
channel.basicQos(1);
// 使用消息消费者监听消息
for (int i = 0; i < 7; i++) {
// 每个消费者都用一个独立的消费标签
String consumerTag = "" + i;
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body) throws IOException {
// 收到消
如果我的回答解决了您的问题,请采纳我的回答