如何在Spring集成中使用两个参数动态调用.handle()内部的重载方法?

2024-04-17

我想让我的 Spring 集成流程对于通过网关传入的不同类型的请求通用,并且我想要重载方法,并希望为通过网关传入的特定消息调用特定的重载方法。

flow.handle(validatorService, "validateRequest")

类似于上面的代码,在 validatorService 内部,我有几个重载方法来满足进入此流程的不同请求。但是,如果我想与有效负载一起向方法发送另一个参数怎么办?那我该怎么办呢。

@Configuration
        public class IntegrationConfiguration {
          @Autowired LionsServiceImpl lionsService;
        
          long dbId = new SequenceGenerator().nextId();
      //   Main flow
      @Bean
  public IntegrationFlow flow() {
    return flow ->
        flow.handle(validatorService, "validateRequest")
            .split()
            .channel(c -> c.executor(Executors.newCachedThreadPool()))
            .scatterGather(
                scatterer ->
                    scatterer
                        .applySequence(true)
                        .recipientFlow(flow1())
                        .recipientFlow(flow2())
                        .recipientFlow(flow3()),
                gatherer ->
                    gatherer
                        .releaseLockBeforeSend(true)
                        .releaseStrategy(group -> group.size() == 2))
            .aggregate(prepareSomeRequest())
            .to(getDec());
  }

//网关

 @Gateway(requestChannel = "flow.input")
  void processLionRequest(
      @Payload Message lionRequest, @Header("sourceSystem") SourceSystem sourceSystem);

所以如果你看到flow.handle(validatorService, "validateRequest")我们有一个 validatorService 类,它接受 LionRequest、CatRequest 并动态调用重载方法。 同样,我有一个重载方法,它接受 2 个参数,一个是 LionRequest 或 CatRequest,另一个是来自标头或某个变量的值。

我的重载方法如下所示 -

public LionRequest save(LionRequest lionreq, String dbID){}

public CatRequest save(CatRequest catReq, String dbID){}..

这样我就可以将 LionRequest 或 CatRequest 传递给网关,并且只需从类中调用 save 方法,并且应该动态调用 LionRequest/CatRequest 重载方法。

请建议。一个示例代码会有所帮助


我们需要理解“另一个论点”是什么,但如果你只谈论一个Message上下文,而不是这样的:

Foo validateRequest(Foo payload, @Header("fooHeader") String fooHeader)

Bar validateRequest(Bar payload, @Header("barHeader") String barHeader)

请参阅文档中的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/configuration.html#annotations https://docs.spring.io/spring-integration/docs/current/reference/html/configuration.html#annotations

参考资料来自于handle()流程定义中的内容与您现在在问题中所拥有的完全相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Spring集成中使用两个参数动态调用.handle()内部的重载方法? 的相关文章

随机推荐

  • 展平 RDD 中的 Scala 映射

    我有一个 RDD 如下所示 uidProcessedKeywords org apache spark rdd RDD Long Map String Double 如何展平 RDD 中的地图以获得以下结果 org apache spark
  • Flash AS3 - 如何访问其他帧(也称为非一帧)中的显示对象

    只要该子项位于第一帧中 getChildByName name 就会起作用 其他框架中的显示对象还没有被实例化 所以并不是说不能访问它们 它们不存在可供访问的地方 当播放头进入具有特定对象的关键帧时 会创建该对象并将其添加到舞台中 当播放头
  • Python 多线程

    我有这样的场景 使用 Zope Plone 和一些我的 python API 创建的网页 有一个网页 称之为 a 它通过 python 方法调用数据库 Postgres 并返回一些信息 在页面 a 上 您可以 离线 修改数 据库数据 我的意
  • 如何让 CBC 在时限内返回最佳解决方案? (皮莫)

    我正在尝试在 Pyomo 上使用 CBC v2 10 3 来解决整数线性问题 执行求解器时 我当前设置的时间限制为 600 秒 opt SolverFactory cbc opt options seconds 600 在这个时间限制内 求
  • 在Python中跳过范围函数中的值

    循环一系列数字并跳过一个值的Python式方法是什么 例如 范围是从 0 到 100 我想跳过 50 编辑 这是我正在使用的代码 for i in range 0 len list x listRow list i for j in ran
  • BringIntoView 不起作用

    我在事件处理程序后面有这段代码 private void comboActiveStudentAssignmentType SelectionChanged object sender SelectionChangedEventArgs e
  • Faye 在 jruby 的铁轨上

    我搜索了很多 但找不到任何资源表明我可以将 Faye 与 jruby 一起使用 我已经发现this one https groups google com forum fromgroups topic faye users wvp K38v
  • 在资源路径中找不到 com/sun/jna/android-arm/libjnidispatch.so

    以下所有操作均在 Android Studio 中完成 我已成功编译并测试了 Android Watson Speech to Text 演示应用程序 然后 我创建了一个包含 Watson 相关 API 的库项目和一个带有引用 Watson
  • 如何向 Next.js 静态站点添加网站图标?

    我正在尝试将网站图标添加到 Next js 静态站点 但运气不佳 我尝试使用以下组件自定义文档 next document https nextjs org docs custom document https nextjs org doc
  • 如何连接字符串列表? [复制]

    这个问题在这里已经有答案了 对于你们大多数人来说 这可能非常容易解决 但我无法简单地解决这个问题str 周围可以吗 我想转换这个列表 A B C into A B C In 1 L A B C In 2 join L Out 2 A B C
  • Apache 中的手动内容压缩

    我需要 Apache 上的手动压缩解决方案 我的目标 在我的服务器上提供 gzip 编码的内容以及未压缩的内容 文件已预先压缩 并非所有文件都经过压缩 我想指定这些文件 并且选择不是基于类型 扩展名 的 提供许多内容类型 自定义内容类型 并
  • NuGet 不更新项目引用

    我最近将所有 Visual Studio 2013 项目迁移到 Visual Studio 2015 并按照本文档中记录的步骤进行操作article https docs nuget org consume package restore
  • 为什么在这种无竞争的情况下原子比锁慢得多?

    我使用原子而不是锁编写了一些东西 并且对它在我的情况下慢得多感到困惑 我编写了以下小型测试 include
  • 找不到版本“CXXABI_1.3.8”(...需要)[重复]

    这个问题在这里已经有答案了 当我在编译后运行程序时 出现以下错误 prog usr lib x86 64 linux gnu libstdc so 6 版本CXXABI 1 3 8 not found required by prog pr
  • getchar() 和 putchar() 是函数还是宏?

    我引用了两个可靠的信息来源 两者似乎对同一事物有不同的定义 http www cplusplus com reference clibr E2 80 A6 http www cplusplus com reference clibr E2
  • 如何实时更新glance小部件?

    有可能吗live update的数据Widget using Glance喷气背包组成 就像在数据库发生变化时更新数据一样 例如 当我使用时flow所以 Flow 应该能够更新小部件数据 对吗 我们可以更新点击操作 例如 class MyW
  • 是否可以在没有订阅密钥的情况下调用 Azure API Rest url?

    我只是希望能够使用 Azure Web Api 管理进行休息调用 而无需在 url 中传递订阅密钥 那可能吗 Azure API 管理允许匿名订阅 创建产品而不需要订阅 产品 gt 设置 gt 需要订阅 将您的 API 添加到此产品 htt
  • 是否有理由将数据库连接池与 ActiveRecord 一起使用?

    使用外部连接池有什么好处 我听说大多数其他应用程序都会为每个工作单元打开一个连接 例如 在 Rails 中 我认为这意味着每个请求都可以打开一个新连接 我假设连接池将使这成为可能 我能想到的唯一好处是它允许您拥有 1 000 个前端进程 而
  • 如何用 Java 检测类 Unix 操作系统?

    好的 我知道System getProperty os name 会给我正在运行的操作系统的名称 但这并没有多大帮助 我需要知道的是 我运行的操作系统是否是 类 Unix 操作系统 我不在乎它是 HP UX AIX Mac OS X 还是其
  • 如何在Spring集成中使用两个参数动态调用.handle()内部的重载方法?

    我想让我的 Spring 集成流程对于通过网关传入的不同类型的请求通用 并且我想要重载方法 并希望为通过网关传入的特定消息调用特定的重载方法 flow handle validatorService validateRequest 类似于上