2014-12-11 2 views
0

Я привык к верблюду, где он несколько прост в конвейерном выводе из одного элемента на другой. Я хочу отправить все события приложения в очередь AMQP, пожарный шланг, а затем маршрутизировать события в разные очереди в зависимости от типа события. Например, если тип события session.created, я хотел бы вытащить его из пожарного шланга и отправить его в session.created queue.Как конвейерные очереди с интеграцией пружин?

Я определил следующую конфигурацию raabitmq

<rabbit:connection-factory id="connectionFactory" host="localhost"/> 

<rabbit:admin connection-factory="connectionFactory"/> 

<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"/> 

<rabbit:queue name="q.firehose"/> 

<rabbit:queue name="q.session.created"/> 

<rabbit:direct-exchange name="e.firehose"> 
    <rabbit:bindings> 
     <rabbit:binding key="firehose" queue="q.firehose"/> 
    </rabbit:bindings> 
</rabbit:direct-exchange> 

<rabbit:headers-exchange name="e.router"> 
    <rabbit:bindings> 
     <rabbit:binding queue="q.session.created"> 
      <rabbit:binding-arguments> 
       <entry key="x-match" value="all"/> 
       <entry key="event_type" value="session.created"/> 
      </rabbit:binding-arguments> 
     </rabbit:binding> 
    </rabbit:bindings> 
</rabbit:headers-exchange> 

И я хочу попробовать что-то вроде этой конфигурации весной интеграции:

<int:channel id="fromFirehose"/> 
<int:channel id="toRouter"/> 

<int-amqp:inbound-channel-adapter channel="fromFirehose" queue-names="q.firehose" connection-factory="connectionFactory"/> 

<!-- Some config element here to move all input from the firehose out and put it into e.router--/> 

<int-amqp:outbound-channel-adapter channel="toRouter" exchange-name="e.router" amqp-template="routerTemplate" /> 

Какой компонент лучше всего подходит для перемещения входного сигнала от пожарного шланга в обмен e.router? Это хороший подход? Похоже, что трансформатор может перемещаться из сообщений с одного канала на другой, но вы обязаны применять преобразование. Если нет другого способа, есть ли доступный DoNothingTransformer?

Заранее благодарен!

ответ

2

Просто соедините как входящие, так и исходящие адаптеры с одним и тем же каналом.

Например:

<int:channel id="fromFirehose"/> 
<int-amqp:inbound-channel-adapter channel="fromFirehose" queue-names="q.firehose" connection-factory="connectionFactory"/> 
<int-amqp:outbound-channel-adapter channel="fromFirehose" exchange-name="e.router" amqp-template="routerTemplate" /> 
+0

Не могли бы вы предоставить образец? –

+0

@ dcerecedo Отредактировано одним –

Смежные вопросы