2017-07-25 79 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

這取決於你的邏輯。如果那樣就不用擔心變壓器的錯誤,那麼以前就承認這是完全沒問題的。您甚至可以在鏈條末端創建一個新的服務激活器來執行此確認 –