如何为消费者设置超时(rabbitmq)

时间:2016-12-13 07:52:04

标签: rabbitmq consumer

我使用SimpleMessageListenerContainer来使用来自rabbitMQ队列的消息。

EVN

  1. 的RabbitMQ:3.6.6
  2. 弹簧兔:1.6.2
  3. CODE:

    @Bean
    public SimpleMessageListenerContainer listenerContainer() {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
        container.setQueues(new Queue("spring.demo"));
        container.setMaxConcurrentConsumers(1);
        container.setConcurrentConsumers(1);
        container.setAcknowledgeMode(AcknowledgeMode.MANUAL);
    
        container.setMessageListener(new ChannelAwareMessageListener() {
            @Override
            public void onMessage(Message message, Channel channel) throws Exception {
                long deliveryTag = message.getMessageProperties().getDeliveryTag();
                try {
                    byte[] body = message.getBody();
                    String result = new String(body);
                    logger.debug("result:" + result);
    
                    // doSomething(for a long time)
    
                    channel.basicAck(deliveryTag, false);
                } catch (Exception e) {
                    e.printStackTrace();
                    channel.basicNack(deliveryTag, false, false);
                }
            }
        });
    
        return container;
    }
    

    有1个消费者来处理消息。现在如果消息将在很长一段时间内处理(5分钟),则不能消耗其他消息。

    我想为每个句柄消息设置超时。例如,设置超时为30秒。如果Message处理超过此值(30秒),则使用者将Exception转移到over handle。因此,这个消费者可以处理其他消息。

    但现在我不知道如何设置此超时?

0 个答案:

没有答案