parameters - 具有多个参数的 Spring 集成网关方法

标签 parameters spring-integration gateway

我有一个关于网关和多个参数的问题:

上下文:
我希望网关有两种方法:

search(Query query, FetchSpec fetchSpec);
search(int queryId, FetchSpec fetchSpec);

第一种方法应该直接路由到执行查询的服务,而第二种方法应该路由到另一个服务以将 queryId 解析为查询,然后再路由到第一个服务以执行查询。

问题 :将两个(或更多)参数作为网关方法的参数的最佳实践是什么?似乎整个模式的目标是只有一个参数对应一个消息。我应该使用消息头来添加额外的参数吗?

最佳答案

我想提出这个问题是在迫使我思考这个问题。

我的问题的答案是这样的:

网关仅将一个参数作为有效负载 - 其余部分转到具有自定义名称的标题字段。所以就我而言,我会这样做:

@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);

我定义了哪些参数是有效载荷,哪些是 header 。然后每个方法将其消息定向到特定 channel 以进行服务激活。

在配置中,我像这样定义网关:
<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'])"/>

这样,我这样设计我的 Manager:
public ResultSet fetchById(int queryId, FetchSpec fetchSpec) {...}

public ResultSet fetchByQuery(Query query, FetchSpec fetchSpec) {...}

我发现这个解决方案非常优雅,因为我的服务中不必对 Spring 有任何依赖。只有网关需要有这种依赖性。接线全部在 Spring 配置中完成。我想我爱上了 spring-integration :-D

关于parameters - 具有多个参数的 Spring 集成网关方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12659008/

相关文章:

c++ - VC++6.0 : too many actual parameters

java - 在运行时配置生存时间属性

java - Spring 集成注释和 SmartLifecycle 接口(interface)

android - 检索Android手机的默认网关

azure - 使用访问限制将应用程序网关 (WAFv2) 前端 IP 列入白名单会导致应用服务出现 403 错误

azure - 入站/出站流量记录 Azure VPN 网关

c++ - 在指定其他参数时使用前导参数的默认值

java - 如何获取和设置networkaddress.cache.ttl的值

objective-c - NSTimer target 和 userInfo 参数问题

java - Http 出站网关从 pojo 负载发送 Json 请求