2017-07-25 75 views
3

我创建豆与承认财产手动和链方法用于发布输出消息入站通道,如何使用弹簧一体化

<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> 

能否请你帮我的方式来手动确认的RabbitMQ消息确认使用手动确认模式处理的消息,

在此先感谢。

回答

0

对此事的Reference Manual具有专用段:

设置模式为MANUAL允许用户代码在处理期间一些其它点到ACK消息。为了支持这一点,在这种模式下,端点分别在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; 
} 
+0

可以请你帮我在哪里添加此方法(sampleconverter,变压器)@Artem比兰 – Vigneshwaran

+0

这取决于你的逻辑。如果那样就不用担心变压器的错误,那么以前就承认这是完全没问题的。您甚至可以在链条末端创建一个新的服务激活器来执行此确认 –