我想向 RabbitMQ 服务器发送一条消息,然后等待回复消息(在“回复”队列上)。当然,我不想永远等待,以防处理这些消息的应用程序出现故障——需要有一个超时。这听起来像是一项非常基本的任务,但我找不到方法来做到这一点。我现在在使用 Java API 时遇到了这个问题。
现在的 RabbitMQ Java 客户端库支持超时参数QueueConsumer.nextDelivery() method http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.6.1/rabbitmq-java-client-javadoc-3.6.1/com/rabbitmq/client/QueueingConsumer.html#nextDelivery(long).
例如,RPC 教程使用以下代码:
channel.basicPublish("", requestQueueName, props, message.getBytes());
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
if (delivery.getProperties().getCorrelationId().equals(corrId)) {
response = new String(delivery.getBody());
break;
}
}
现在,您可以使用consumer.nextDelivery(1000)
最多等待一秒。如果达到超时,该方法返回null
.
channel.basicPublish("", requestQueueName, props, message.getBytes());
while (true) {
// Use a timeout of 1000 milliseconds
QueueingConsumer.Delivery delivery = consumer.nextDelivery(1000);
// Test if delivery is null, meaning the timeout was reached.
if (delivery != null &&
delivery.getProperties().getCorrelationId().equals(corrId)) {
response = new String(delivery.getBody());
break;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)