spring amqp的异步回滚

时间:2015-04-21 04:43:13

标签: java rabbitmq spring-amqp

我正在尝试使用spring amqp的回滚/提交功能。 根据文档,我需要在rabbitTemplate和SimpleMessageContainer中将 channelTransacted 设置为true。

我的最终目标是移动基于xml的所有代码而不是注释方法。但是对于POC的目的,我正在研究spring-rabbit-helloworld样本。

在我的消费者中,如果我抛出异常,它会继续重试并且不会进行任何回滚。

@Bean
public SimpleMessageListenerContainer listenerContainer() {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory());
    container.setQueueNames(this.helloWorldQueueName);
    container.setMessageListener(new MessageListenerAdapter(new HelloWorldHandler()));
    container.setChannelTransacted(true);
    //container.setTxSize(1);
    //container.setRecoveryInterval(1000);
    container.setAcknowledgeMode(AcknowledgeMode.AUTO);
    //container.setRecoveryInterval(1000l);
    container.setDefaultRequeueRejected(true);
    return container;
}

@Bean
public RabbitTemplate rabbitTemplate() {
    RabbitTemplate template = new RabbitTemplate(connectionFactory());
    template.setRoutingKey(this.helloWorldQueueName);
    template.setChannelTransacted(true);

    return template;
}

收件人:

public void onMessage(Message msg) throws Exception {
    System.out.println("Received: " + msg);
    throw new RuntimeException("error");
}

我尝试了各种组合,但没有奏效。

我们的设计是将MessageListener(javax.jms.MessageListener)附加到容器。

除了设置rabbitTemplate的属性外,我是否还需要在制作人中做任何事情?

0 个答案:

没有答案