String confirmed = outstandingConfirms. headMap(sequenceNum
2019年12月10日10:07:12
原文:https://www.rabbitmq.com/tutorials/tutorial-seven-java.html
注意这里目前没有PHP版本只有java版本
颁布者确认是实现可靠颁布的RabbitMQ扩展。在通道上启用颁布者确认后,代办代理将异步确认客户端颁布的动静,这意味着它们已在处事器端措置惩罚惩罚。
(使用Java客户端)先决条件
本教程假定RabbitMQ 已在标准端口(5672)的本田主机上安置并运行。如果您使用其他主机,端口或根据,则连接设置需要进行调解。
在哪里获得辅佐如果您在阅读本教程时遇到困难,可以 通过邮件列表联系。
总览在本教程中,我们将使用颁布者确认来确保颁布的动静已安适达到代办代理。我们将介绍几种使用颁布者确认并解释其优错误谬误的计谋。
在频道上启用颁布者确认颁布者确认是AMQP 0.9.1协议的RabbitMQ扩展,因此默认情况下未启用它们。颁布者确认在通道级别使用confirmSelect要领启用:
Channel channel = connection.createChannel(); channel.confirmSelect();
必需在但愿使用颁布者确认的每个频道上挪用此要领。确认仅应启用一次,而不是对每个已颁布的动静都启用。
计谋1:分袂颁布动静让我们从使用确认颁布的最简单要领开始,即颁布动静并同步期待其确认:
while (thereAreMessagesToPublish()) { byte[] body = ...; BasicProperties properties = ...; channel.basicPublish(exchange, queue, properties, body); // uses a 5 second timeout channel.waitForConfirmsOrDie(5_000); }
在前面的示例中,我们像往常一样颁布一条动静,并期待通过Channel#waitForConfirmsOrDie(long)要领对其进行确认。确认动静后,该要领当即返回。如果未在超不时间内确认该动静或该动静没有被确认(这意味着代办代理出于某种原因无法措置惩罚惩罚该动静),,则该要领将引发异常。异常的措置惩罚惩罚凡是包孕记录错误动静和/或重试发送动静。
差此外客户端库有差此外方法来同步措置惩罚惩罚颁布者简直认,因此请确保仔细阅读所使用客户真个文档。
该技术非常简单,但也有一个主要错误谬误:由于动静简直认会阻止所有后续动静的颁布,因此它会大大减慢颁布速度。这种要领不会供给每秒赶过数百条已颁布动静的吞吐量。但是,对付某些应用措施来说这可能已经足够了。
颁布者确认异步吗?我们在一开始提到代办代理是异地势确认颁布的动静,但是在第一个示例中,代码同步期待直到动静被确认。客户端实际上异步接收确认,并相应地打消阻止对waitForConfirmsOrDie的挪用 。可以将waitForConfirmsOrDie视为依赖于幕后异步通知的同步辅佐器。
计谋2:批量颁布动静为了改造前面的示例,我们可以颁布一批动静,并期待整个批次被确认。以下示例使用了100个批次:
int batchSize = 100; int outstandingMessageCount = 0; while (thereAreMessagesToPublish()) { byte[] body = ...; BasicProperties properties = ...; channel.basicPublish(exchange, queue, properties, body); outstandingMessageCount++; if (outstandingMessageCount == batchSize) { ch.waitForConfirmsOrDie(5_000); outstandingMessageCount = 0; } } if (outstandingMessageCount > 0) { ch.waitForConfirmsOrDie(5_000); }
与期待确认单个动静对比,期待一批动静被确承认以极大地提高吞吐量(对付长途RabbitMQ节点,这最多可以到达20-30次)。一个错误谬误是我们不知道产生故障时到底出了什么问题,因此我们可能必需将整个批措置惩罚惩罚生存在内存中以记录有意义的内容或从头颁布动静。而且该解决方案仍然是同步的,因此它阻止了动静的颁布。
计谋3:措置惩罚惩罚颁布者异步确认代办代理异步确认已颁布的动静,只需在客户端上注册一个回调即可收到这些确认的通知:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32096.html