带轮询的RabbitMQ(Spring)RPC-在回复队列中杀死消息

时间:2019-05-19 16:33:15

标签: java spring rabbitmq

我有一个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;
    }

0 个答案:

没有答案