2016-05-30 78 views
1

在Spring集成中,人們很少能夠操縱消息。一種方法是調用Bean的內部<int:enricher>方法會返回一個對象並將其分配給定的名稱,例如:在Spring集成中調用服務激活器vs bean方法

<!-- calls getKey method of IdGenerator bean which returns String with some value --> 
<int:enricher input-channel="a.channel" output-channel="b.channel" id="preTranslator"> 
    <int:header name="Key" expression="@IdGenerator.getId(payload)"/> 
</int:enricher> 

一樣可以在過濾中使用:

int:filter discard-channel="d.channel" input-channel="b.channel" output-channel="c.channel" 
    expression="@Cache.hasKey(headers.Key) == false"/> 

在另一方面,我可以在實現MessageProcessor接口的類上調用<int:service-activator>。它將採用原始消息並返回一個帶有新標題字段的副本。這需要我的類的方法始終使用MessageBuilder構建新的消息。

目前我使用第一種方法來簡單的字段豐富和服務激活器來從數據庫/外部服務請求數據。選擇正確方法的正確方法是什麼?

回答

0

首先,<filter>根本沒有改變信息。 given name應該被看作header,看你的情況。

<service-activator>總是返回一條新消息。是的,您可以在那裏填寫新的headers,而且您必須使用MessageBuilder

你完全不清楚你的問題。如果你可以在配置中使用表達式來實現解決方案,那就這樣做。但是,如果您在代碼中對消息進行了處理,並且想要添加/編輯/刪除headers,則可以使用MessageBuilder

這真的很好。我認爲你應該在你的應用程序中閱讀更多的文檔和更多的代碼。

最終你會發現自己最方便的風格。例如,我最終用表達式和Groovy腳本結束了一次。根本沒有Java代碼。但是現在我更喜歡Spring Integration Java DSL,因爲它更快,更乾淨,流暢,並且可以擺脫XML或Groovy等其他配置。現在一切都是Java,MessageBuilder仍然在馬上!

相關問題