rabbitmq消费者问题

rabbitmq一个队列7个消费者,每个消费则者都是排他性的,影响正常消费么?

img

不影响。

以下答案引用自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 {
            // 收到消

如果我的回答解决了您的问题,请采纳我的回答