消息发布的确认

消息发布的确认

在RMQ中,消息发布的确认有两种方式,一种是AMQP标准的方式,一种是RMQ扩展的方式

1. 事务机制

通过事务的机制来保证每次消息的发布是成功的,如示例代码所示, 但这个方法最大的不足是它必须等待broker处理完后才能继续,导致这种方式的效率非常低,大概比没有启用事务要低250%左右。

1
2
3
channel.txSelect();
channel.basicPublish();
channel.txCommit(); //or channel.txRollback();

2. 确认机制

除了事务机制外,RMQ还提供了一种确认机制,它通过broker的确认来实现。通过将通道切换成confirm模式来进行确认,如下代码所示,它的效率要比事务机制高得多

1
2
3
channel.addConfirmListener();
channel.confirmSelect();
channel.basicPublish();

3. 确认机制和事务机制不能同时使用

4. 消息确认的时机

对于无法路由到任何队列的消息来讲,它将直接进行确认,对于可以路由的消息来讲,直到所有的队列都接收到消息后才会进行消息确认;对于持久化队列来讲,接收到消息意味着持久化已经完成或者已经被全部消费;对于镜像队列而言,接收到消息意味着所有的镜像队列都已经收到相应的消息,如下图所示.由于RMQ内部是通过批量序列化的方式来进行持久化的,因此对于持久化队列而言,消息确认的延迟可能会非常长

参考文档

  1. 消息发布的确认
  2. 消息发布确认的介绍
您的支持将鼓励我继续创作!