【问题标题】:How to acknowledge rabbitmq message manually using spring intergration如何使用spring集成手动确认rabbitmq消息
【发布时间】:2017-12-31 13:42:42
【问题描述】:

我已经为入站通道创建了带有手动确认属性的bean,以及用于发布输出消息的链式方法,

<int-amqp:inbound-channel-adapter channel="InputChannel" 
    queue-names="Input" connection-factory="connectionFactory" concurrent-consumers="1" message-converter="Converter"  
      acknowledge-mode="MANUAL" prefetch-count="5"/>

<int:chain input-channel="InputChannel" output-channel="OutputChannel">

      <int:transformer method = "transform" >
        <bean class="com.sampleconverter" />
      </int:transformer>
        <int:service-activator method="transform">
             <bean class="com.Transformer" />
        </int:service-activator>
     <int:object-to-string-transformer />
   </int:chain>

您能帮我了解一下手动确认模式处理的消息的确认方式吗,

提前致谢。

【问题讨论】:

    标签: java spring rabbitmq spring-integration


    【解决方案1】:

    Reference Manual 有专门的段落讨论此事:

    将模式设置为MANUAL 允许用户代码在处理期间的某个其他时间点确认消息。为了支持这一点,在这种模式下,端点分别在 amqp_channel 和 amqp_deliveryTag 标头中提供 Channel 和 deliveryTag。

    @ServiceActivator(inputChannel = "foo", outputChannel = "bar")
    public Object handle(@Payload String payload, @Header(AmqpHeaders.CHANNEL) Channel channel,
            @Header(AmqpHeaders.DELIVERY_TAG) Long deliveryTag) throws Exception {
    
        // Do some processing
    
        if (allOK) {
            channel.basicAck(deliveryTag, false);
    
            // perhaps do some more processing
    
        }
        else {
            channel.basicNack(deliveryTag, false, true);
        }
        return someResultForDownStreamProcessing;
    }
    

    【讨论】:

    • 你能帮我在哪里添加这个方法(sampleconverter,Transformer)@Artem Bilan
    • 这取决于你的逻辑。如果没问题,不要担心变压器的错误,之前承认这一点是完全可以的。您甚至可以在链的末端创建一个新的服务激活器来执行此确认
    最近更新 更多