我有一个RPC进程,该进程接收一条消息,发送到队列以供其他进程处理,然后将该响应扔到答复队列中。在我的流程队列中获取消息的使用者进行确认,就是这样。
如果整个过程花费的时间太长,则会告知客户端失败。如果该消息没有进入流程,它将死于流程队列中并超时。
但是,如果它与使用者死亡,则消息进入回复队列并且永不超时。我以为他的消息超时将继续处理消息,但事实并非如此。
如何让消费者在响应上设置超时?
@RabbitListener(queues="${rabbitmq.main.in.queue}", containerFactory = "createDirectMessageListenerContainerFactory")
public String processMessage(@Payload String messageAsJson, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws Exception {
try {
// Process message
AbstractMap.SimpleEntry<Boolean, JsonObject> result = messageServices.processMessage(messageAsJson);
// Take the response, generate a JSON object for return. Then ack the message
JsonObject responseObj = ResponseUtils.buildJsonResponseFromSimpleEntry(result);
// Something here to add a timeout for the reply queue?
channel.basicAck(tag, true);
return responseObj.toString();
}
catch(Exception ex) {
logger.fatal("Exception thrown processing message: ", ex);
channel.basicNack(tag, false, true);
return null;
}