2015-10-09 29 views
0

我是彈簧集成的新手。我的要求是,如果jms q存在連接問題,那麼它應該嘗試連接3次,然後記錄並退出過程。我無法做到。它會拋出一個錯誤,說它需要service:activator的ref屬性。但我不知道在這裏提供哪一類的參考。還有其他的方式嗎?如何用jms添加重試建議:消息驅動通道適配器

<int-jms:message-driven-channel-adapter id="msgIn" channel="toRoute" container="messageListenerContainer" /> 
 

 
<int:service-activator id="service" input-channel="toRoute" > 
 
    <int:request-handler-advice-chain> 
 
     <bean class="org.springframework.integration.handler.advice.RequestHandlerRetryAdvice"> 
 
\t \t <property name="recoveryCallback"> 
 
       <bean class="org.springframework.integration.handler.advice.ErrorMessageSendingRecoverer"> 
 
        <constructor-arg ref=「errorChannel" /> 
 
       </bean> 
 
      </property> 
 
\t </bean> 
 
    </request-handler-advice-chain> 
 
</int:service-activator>

回答

0

你似乎已經完全誤解了框架做什麼。

當從JMS接收到一個消息(這意味着連接良好)並且需要「某事」(對bean或表達式的引用)以作爲接收該消息的結果而調用時,服務激活器會獲取消息。

重試通知是如果由於某種原因無法處理消息,則重試調用該服務。它與消息的來源無關(在這種情況下是JMS)。

目前尚不清楚爲什麼你試圖使用Spring Integration來做一些簡單的事情,比如測試一個JMS代理是否可用。

也許如果你可以提供一些更大的上下文有人可能會提供幫助。

+0

非常感謝Gary讓我置身於正確的環境中。這當然有幫助。 –

+0

至於要求,檢查經紀人的可用性只是一部分。我們有一個完整的應用程序,它可以從一個q中提取消息並放到另一箇中,等等。這是我的經理希望我做的一項小規定。但是因爲我對這個很陌生,所以沒有想法。 –

+0

您可以簡單地在連接工廠調用'createConnection()';如果成功,你就可以(關閉它);如果沒有,經過一些嘗試後關閉(儘管目前還不清楚爲什麼你會這麼做)。使用消息監聽器容器,Spring將不斷嘗試連接,直到成功。 –

相關問題