2009-06-22 75 views
3

我有一個消息處理程序,它從JMS隊列中消耗並將結果發送到另一個JMS隊列。消息處理程序位於Spring的DefaultMessageListenerContainer中。 當容器關閉時,我希望它完成處理它已經使用的任何請求併發送結果。同時,它不應再消耗請求隊列中的任何新消息。如何正常關閉Spring JMS MessageListenerAdapter

現在,沒有特別的關閉規定安全的ApplicationContext.registerShutdownHook(),容器等待任何未決的listernerMethod調用返回,但它不會將結果發送到響應隊列。

確保將由運行處理程序生成的響應發送到響應隊列的適當方法是什麼?

回答

2

我覺得要走的路要通過DisposableBean界面或@PreDestroy註釋。恕我直言,關鍵不是讓Spring關閉DMLC,而是讓一個知道當前「系統內部」消息的組件完成此任務。這樣,您可以在等待當前處理的消息完成時停止監聽新消息。

在bean聲明中使用depends-on屬性,您還可以定義要關閉的bean的順序。在這個Spring reference documentation紅色更多。