我想这个问题迫使我去思考这个问题。
的回答我的问题是这样的:
网关带一个参数作为有效载荷 - 其余的去与自定义名称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