2015-07-15 2 views
1

У меня небольшой маршрут, и я хотел бы использовать пользовательскую политику переопределения, чтобы повторять отправку сообщений в конечную точку, но поведение довольно странно. Похоже, что redeliveryPolicy повторяет только ошибку. Я пытался отправить все Биржу начала маршрута, но тогда политика не работает причина создания каждый раз:Политика Redelivery в Camel

 <route id="sampleRoute"> 
      <from uri="direct:anotheRoute" /> 
      <to uri="nmr:kaboom" /> 
      <choice> 
       <when> 
        <xpath>//result = 'true'</xpath> 
        <to uri="direct:anotherAnotherRoute" /> 
       </when> 
       <otherwise> 
        <throwException ref="redeliveryException" /> 
       </otherwise> 
      </choice> 
      <onException> 
       <exception>java.net.SocketException</exception> 
       <exception>java.net.ConnectException</exception> 
       <exception>my.custom.error.RedeliveryException</exception> 
       <redeliveryPolicy ref="customRedeliveryPolicy" /> 
       <to uri="direct:anotheRoute" /> 
      </onException> 
     </route> 

Что я делаю не так? Я хочу повторить запрос с интервалами, когда возникает ошибка. Мой верблюд версия 2.6

журналы:

16:29:43,780 | DEBUG | cc5bd91-thread-1 | DefaultListableBeanFactory  | | 59 - org.springframework.beans - 3.0.5.RELEASE | Returning cached instance of singleton bean 'RedeliveryPolicy' 
16:29:43,780 | DEBUG | cc5bd91-thread-1 | DefaultErrorHandler    | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Failed delivery for exchangeId: ID-1NVC-52527-1436958153799-314-4. On delivery attempt: 0 caught: my.custom.error.RedeliveryException 
16:29:43,780 | DEBUG | cc5bd91-thread-1 | RedeliveryPolicy     | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Sleeping for: 60 millis until attempting redelivery 
16:29:43,840 | DEBUG | cc5bd91-thread-1 | DefaultListableBeanFactory  | | 59 - org.springframework.beans - 3.0.5.RELEASE | Returning cached instance of singleton bean 'RedeliveryPolicy' 
16:29:43,840 | DEBUG | cc5bd91-thread-1 | DefaultErrorHandler    | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Failed delivery for exchangeId: ID-1NVC-52527-1436958153799-314-4. On delivery attempt: 1 caught: my.custom.error.RedeliveryException 
16:29:43,840 | DEBUG | cc5bd91-thread-1 | RedeliveryPolicy     | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Sleeping for: 60 millis until attempting redelivery 
16:29:43,900 | DEBUG | cc5bd91-thread-1 | DefaultListableBeanFactory  | | 59 - org.springframework.beans - 3.0.5.RELEASE | Returning cached instance of singleton bean 'RedeliveryPolicy' 
16:29:43,900 | DEBUG | cc5bd91-thread-1 | DefaultErrorHandler    | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Failed delivery for exchangeId: ID-1NVC-52527-1436958153799-314-4. On delivery attempt: 2 caught: my.custom.error.RedeliveryException 
16:29:43,900 | DEBUG | cc5bd91-thread-1 | RedeliveryPolicy     | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Sleeping for: 60 millis until attempting redelivery 
16:29:43,960 | DEBUG | cc5bd91-thread-1 | DefaultListableBeanFactory  | | 59 - org.springframework.beans - 3.0.5.RELEASE | Returning cached instance of singleton bean 'RedeliveryPolicy' 
16:29:43,960 | DEBUG | cc5bd91-thread-1 | DefaultErrorHandler    | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Failed delivery for exchangeId: ID-1NVC-52527-1436958153799-314-4. On delivery attempt: 3 caught: my.custom.error.RedeliveryException 
16:29:43,960 | DEBUG | cc5bd91-thread-1 | RedeliveryPolicy     | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Sleeping for: 60 millis until attempting redelivery 
16:29:44,020 | DEBUG | cc5bd91-thread-1 | DefaultListableBeanFactory  | | 59 - org.springframework.beans - 3.0.5.RELEASE | Returning cached instance of singleton bean 'RedeliveryPolicy' 
16:29:44,020 | DEBUG | cc5bd91-thread-1 | DefaultErrorHandler    | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Failed delivery for exchangeId: ID-1NVC-52527-1436958153799-314-4. On delivery attempt: 4 caught: my.custom.error.RedeliveryException 
16:29:44,020 | DEBUG | cc5bd91-thread-1 | RedeliveryPolicy     | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Sleeping for: 60 millis until attempting redelivery 
16:29:44,080 | DEBUG | cc5bd91-thread-1 | DefaultListableBeanFactory  | | 59 - org.springframework.beans - 3.0.5.RELEASE | Returning cached instance of singleton bean 'RedeliveryPolicy' 
16:29:44,080 | DEBUG | cc5bd91-thread-1 | DefaultErrorHandler    | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Failed delivery for exchangeId: ID-1NVC-52527-1436958153799-314-4. On delivery attempt: 5 caught: my.custom.error.RedeliveryException 
16:29:44,081 | DEBUG | cc5bd91-thread-1 | NMR        | | 81 - org.apache.servicemix.nmr.core - 1.4.0.fuse-03-01 | Channel [email protected] dispatching exchange: [ 

ответ

2

Это не странно, обработчик ошибок верблюжьих и обратная передача выполняют от шага, который не удался, не с самого начала маршрута.

Вы можете вместо вызова ошибки direct:anotherRoute, только проблема в том, что если вы делаете это слишком часто, ваш стек вызовов может стать слишком глубоким.

Что вы можете сделать вместо этого положить, что nmr:kaboom в отдельный маршрут, и настроить его, чтобы иметь noErrorHandler, а затем из первого маршрута, назовем его с direct:, то обработчик ошибок может возвращать весь маршрут от начала ,

1

Спасибо за это объяснение. Я вывешу правильный ответ:

 <route id="sampleRoute"> 
      <from uri="direct:anotheRoute" /> 
      <to uri="direct:kaboom" /> 
      <onException> 
       <exception>java.net.SocketException</exception> 
       <exception>java.net.ConnectException</exception> 
       <exception>my.custom.error.RedeliveryException</exception> 
       <redeliveryPolicy ref="customRedeliveryPolicy" /> 
      </onException> 
     </route> 
     <route errorHandlerRef="noErrorHandler"> 
      <from uri="direct:kaboom /> 
      <to uri="nmr:kaboom/> 
      <choice> 
       <when> 
        <xpath>//result = 'true'</xpath> 
        <to uri="direct:anotherAnotherRoute" /> 
       </when> 
       <otherwise> 
        <throwException ref="redeliveryException" /> 
       </otherwise> 
      </choice> 
     </route> 

и декларации внутри бобов:

<bean id="noErrorHandler" class="org.apache.camel.builder.NoErrorHandlerBuilder"/> 
Смежные вопросы