2017-05-10 61 views
0

我有一個彈簧一體化項目,該項目執行以下操作Spring的集成默認試配置

1.) Read messages from a queue 
2.) Transform messages 
3.) Send transformed messages to an Api 

相關配置第1步

<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <property name="targetConnectionFactory" ref="MQConnectionFactory" /> 
    <property name="sessionCacheSize" value="10"/> 
</bean> 


<bean id="requestQueue" class="com.ibm.mq.jms.MQQueue"> 
    <constructor-arg index="0" value="${queuemanager}"/> 
    <constructor-arg index="1" value="${incoming.queue}"/> 
</bean> 


<integration:poller id="poller" default="true" fixed-delay="1000"/> 

<jms:message-driven-channel-adapter id="jmsIn" 
     destination="requestQueue" 
     channel="inputJsonConversionChannel" 
     connection-factory="cachingConnectionFactory" /> 

第三步是服務激活,並在的情況下,失敗(不是HTTP狀態)我正在拋出一個自定義異常。

步驟3

<int:service-activator input-channel="ApiChannel" ref="EventApiClient" method="post"/> 

<int:service-activator input-channel="errorChannel" ref="PListenerExceptionHandler" method="handleFailure"/> 

時發生的行爲相關的配置是,它不斷嘗試連接,並一遍又一遍地得到同樣的錯誤。

我想知道,如果有人可以給我

  • 如何配置此默認重試/觸發解釋一下嗎?

  • 如何將錯誤重定向到錯誤通道,因爲現在步驟1中的錯誤使用全局錯誤通道和我創建的默認錯誤處理程序。但是Service Activator的錯誤不是。

乾杯

克里斯

+0

您需要顯示您的配置並告訴我們隊列是什麼技術 - RabbitMQ? JMS? –

+0

抱歉...我已更新該帖子以獲得更多清晰度。 – krisrr3

回答

0

這是因爲重試消息驅動通道適配器是事務默認,這意味着異常導致該消息被回滾到隊列中。

您可以添加一個error-channel適配器和任何異常都會在ErrorMessage,其具有具有性能failedMessagecause有效載荷MessagingException的形式發送。

如果錯誤通道下游的集成流「消耗」錯誤,則事務將被提交併且消息被移除。如果錯誤流引發異常,則事務將像以前一樣回滾。

有一個默認的errorChannel它默認記錄異常。

error-channel="errorChannel" 

或者您可以使用自定義通道並將自己的邏輯放入該通道的訂閱者。

+0

謝謝加里。將錯誤通道添加到適配器,並且不再回滾 – krisrr3