我正在使用Vertx 4.2.1和RabbitMQ客户端,我刚刚注意到,有时当RabbitMQ客户端失去连接并重新连接时,RabbitMQPublisher就不能再发布消息了。这意味着我对publisherClient.rxPublish(...)的调用永远不会完成,也不会抛出任何错误。
我的客户端设置为:
new RabbitMQOptions().setAutomaticRecoveryEnabled(true)
.setReconnectAttempts(0)
.setNetworkRecoveryInterval(1000L);
是否有一些设置或东西来防止这种情况?
目前,我正尝试使用以下解决方法来解决此问题:
publisherClient.rxPublish(......)
.timeout(5, TimeUnit.SECONDS)
.doOnError(err -> {
if (err instanceof TimeoutException) {
LOG.warn("Publisher did not recover, so it will be restarted");
publisherClient.restart();
}
})
.retry(1L, err -> err instanceof TimeoutException)
作为对该问题的一个小更新:这似乎是可重复的,如果我们试图在RabbitMQ连接断开时发布消息,即使连接恢复并且一切正常,我们也无法发布任何消息。对publisherClient.rxPublish(......)的调用永远不会完成
多谢帮忙
2条答案
按热度按时间rqmkfv5c1#
您如何测试它?您如何创建要发布到的交换和队列?
如果服务器返回时对象不在那里,那么所有消息将自动消失。为了创建对象,您需要使用连接建立的回调,这些回调当前无法通过Rx Package 器访问。
a8jjtwal2#
请尝试以下操作: