2017-07-17 121 views
0

我在彈簧定義爲兔配置:彈簧的RabbitMQ - xml配置 - 手動ACK

<rabbit:connection-factory id="amqpConnectionFactory" addresses="${amqp.host}:${amqp.port}" 
          thread-factory="rabbitThreadFactory" 
          cache-mode="CHANNEL" 
          channel-cache-size="25" 
          username="${amqp.user}" 
          password="${amqp.pass}" 
          virtual-host="${amqp.vhost}"/> 

<rabbit:admin connection-factory="amqpConnectionFactory" id="rabbitAdmin"/> 

<rabbit:topic-exchange id="motoTopicExchange" name="moto.ex.topic" > 
    <rabbit:bindings> 
     <rabbit:binding pattern="moto.*.speed" queue="motoQueue8"/> 
     <rabbit:binding pattern="moto.*.tour" queue="motoQueue9"/> 
     <rabbit:binding pattern="moto.*.naked" queue="motoQueue10"/> 
    </rabbit:bindings> 
</rabbit:topic-exchange> 

<rabbit:queue id="motoQueue8" name="moto.queue.8"/> 
<rabbit:queue id="motoQueue9" name="moto.queue.9"/> 
<rabbit:queue id="motoQueue10" name="moto.queue.10"/> 

<rabbit:template id="rabbitTemplate" 
       connection-factory="amqpConnectionFactory" 
       retry-template="retryTemplate" 
       message-converter="rabbitJsonConverter"/> 

<bean id="rabbitJsonConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter"/> 

<rabbit:listener-container connection-factory="amqpConnectionFactory" message-converter="rabbitJsonConverter" 
          max-concurrency="10" acknowledge="auto"> 
    <rabbit:listener ref="amqpService8" method="handleSimple" queues="motoQueue8"/> 
    <rabbit:listener ref="amqpService9" method="handleSimple" queues="motoQueue9"/> 
    <rabbit:listener ref="amqpService10" method="handleSimple" queues="motoQueue10"/> 
</rabbit:listener-container> 

凡在聽衆handleSimple方法消耗例如摩托車對象(也有JSON的轉換髮送思想AMQP時)。

  1. 我該如何手動確認傳入聽衆的按摩?
  2. 是否有可能將MessageHeader與對象(摩托車)並列?

我不想配置偵聽器思想註釋。

謝謝

回答

1

什麼是手動ack的願望?需要它們是非常不尋常的;該容器將爲您照顧acking。

要使用手動確認,您需要一個ChannelAwareMessageListener實現。

您還必須自己調用消息轉換器。

+0

感謝確認:) 只是不知道是否有「一些」配置,它允許FOT這種情況下使用兔命名空間 – lukisp

+0

其實,我的錯誤 - 如果你的聽衆實現'ChannelAwareMessageListener'由'兔配置的'MessageListenerAdapter':'命名空間只是委託給你的監聽器。所以,你可以將它與命名空間一起使用。 –