【问题标题】:Spring integration gateway methods with multiple parameters具有多个参数的 Spring 集成网关方法
【发布时间】:2012-09-21 11:02:29
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: parameters spring-integration gateway


    【解决方案1】:

    我想问这个问题是在强迫我思考这个问题。

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

    Gateway 只使用一个参数作为 Payload - 其余参数用于自定义名称的标题字段。所以就我而言,我会这样做:

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

    我定义了哪些参数是有效负载,哪些是标头。然后每个方法将其消息引导到特定的通道以进行服务激活。

    在配置中我这样定义我的网关:

    <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 有任何依赖。只有网关需要这种依赖。接线全部在弹簧配置中完成。我想我爱上了 spring-integration :-D

    【讨论】:

      【解决方案2】:

      您可以在网关端使用以下内容:

      @Payload("T(java.util.Arrays).asList(#args[0],#args[1])")
      search(Query query, FetchSpec fetchSpec);
      

      如果假设签名相同,则在服务激活器上:

      @ServiceActivator(inputChannel = "request", outputChannel = "reply")
      search(@Payload("#this[0]")  Query query, @Payload("#this[1]") FetchSpec fetchSpec)
      

      【讨论】:

        猜你喜欢
        • 2012-04-05
        • 1970-01-01
        • 2019-07-28
        • 1970-01-01
        • 2016-10-16
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 1970-01-01
        相关资源
        最近更新 更多