rabbitmq

发送方确认机制

2020-11-30  本文已影响0人  于情于你

    前面说了RabbitMQ的事务,可是采用事务机制实现会严重降低 RabbitMQ 的消息吞吐量,这里就引入了一种轻量级的方式--发送方确认机制

    生产者将信道设置成confirm(确认)模式,一旦信道进入confirm 模式,所有在该信道上面发布的消息都会被指派一个唯一的ID(从1开始),一旦消息被投递到所有匹配的队列之后, RabbitMQ 就会发送一个确认(Basic.Ack)给生产者(包含消息的唯一ID),这就使得生产者知晓消息已经正确到达了目的地了。如果消息和队列是可持久化的,那么确认消息会在消息写入磁盘之后发出。RabbitMQ 回传给生产者的确认消息中的 deliveryTag 包含了确认消息的序号。

    事务机制在一条消息发送之后会使发送端阻塞,以等待 RabbitMQ 的回应,之后才能继续发送下一条消息。相比之下,发送方确认机制最大的好处在于它是异步的,一旦发布一条消息,生产者应用程序就可以在等信道返回确认的同时继续发送下条消息。

   channel.confirmSelect();

   channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, false, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());

   try {
       if(!channel.waitForConfirms()) {
           logger.error("发送消息失败");
         }
        } catch (InterruptedException e) {
            e.printStackTrace();
   }

image.png

注意:事务机制和 publisher confirm 机制两者是互斥的,

上一篇下一篇

猜你喜欢

热点阅读