我想這個問題迫使我去思考這個問題。
的回答我的問題是這樣的:
網關帶一個參數作爲有效載荷 - 其餘的去與自定義名稱headerfields。所以在我的情況下,我會做這樣的:
@Gateway (requestChannel = "incomingAdhocQuery")
public ResultSet search(@Payload Query query, @Header("fetchSpec") FetchSpec fetchSpec);
@Gateway (requestChannel = "incomingPersistedQuery")
public ResultSet search(@Payload int queryId, @Header("fetchSpec") FetchSpec fetchSpec);
我定義哪些參數是有效載荷,哪些是headers.Then每種方法指導其消息服務激活特定的渠道。
在配置上,我定義我的網關是這樣的:
<int:gateway service-interface="my.company.search.Search" />
然後我激活與每個網關的方法一個具體配置搜索服務:
<bean id="myManager" class="my.company.search.MyManager"/>
<int:service-activator input-channel="incomingAdhocQuery" expression="@myManager.fetchByQuery(payload, headers['fetchSpec'])"/>
<int:service-activator input-channel="incomingPersistedQuery" expression="@myManager.fetchById(payload, headers['fetchSpec'])"/>
這樣,我設計我的經理是這樣的:
public ResultSet fetchById(int queryId, FetchSpec fetchSpec) {...}
public ResultSet fetchByQuery(Query query, FetchSpec fetchSpec) {...}
我覺得這個解決方案非常優雅,因爲我不必在我的服務中對Spring有任何依賴。只有網關需要這種依賴性。接線全部在彈簧配置中完成。我想我愛上了彈簧集成:-D