当前位置: 首页 > 知识库问答 >
问题:

Spring Integration DSL-带网关块线程的组合

钮晟
2023-03-14

我试图了解如何将IntegrationFlow构建为单元,并将它们连接起来。

我设置了一个非常简单的处理集成流:


IntegrationFlow processingFlow = f -> f
                .<String>handle((p, h) -> process(p))
                .log();

        flowContext.registration(processingFlow)
                .id("testProcessing")
                .autoStartup(false)
                .register();

处理非常简单:

   public String process(String process) {
            return process + " has been processed";
    }

然后,使用.gateway()从一个源组成一个流,将该源加入到处理中:

  MessageChannel beginningChannel = MessageChannels.direct("beginning").get();

        StandardIntegrationFlow composedFlow = IntegrationFlows
                .from(beginningChannel)
                .gateway(processingFlow)
                .log()
                .get();

        flowContext.registration(composedFlow)
                .id("testComposed")
                .autoStartup(false)
                .addBean(processingFlow)
                .register();
 composedFlow.start();

 beginningChannel.send(MessageBuilder.withPayload(new String("first string")).build());
 beginningChannel.send(MessageBuilder.withPayload(new String("second string")).build());

日志处理程序确认已经为第一条消息调用了handle方法,但是主线程随后处于空闲状态,并且永远不会处理第二条消息。

这难道不是从构建块组成集成流的正确方法吗?在通道中这样做需要将通道注册为bean,我试图动态地完成所有这些。

共有1个答案

施知
2023-03-14

它必须是processingflow中的logandreply()。看看他们的JavaDocs有什么不同。流末尾的log()使其成为单向的。这就是为什么您被阻止,因为网关等待回复,但没有人符合您当前的流定义。不幸的是,我们不能从框架级别确定这一点:可能会有一些情况,当您确实没有根据路由或过滤逻辑返回时。网关可以配置应答超时。默认情况下,它是无限的。

 类似资料:
  • 问题内容: 我正在尝试编写一个程序,该程序在循环中创建新线程,而不等待它们完成。据我了解,如果我在线程上使用.start(),则我的主循环应继续执行,而另一个线程将关闭并同时执行其工作 但是,一旦我的新线程启动,循环就会阻塞,直到线程完成为止。我是否误解了python中线程的工作方式,还是我正在做一些愚蠢的事情。 这是我用于创建新线程的代码。 谢谢大家 问题答案: 这将调用该函数并将其 结果 传递

  • 我想举例说明一个关于铁路的项目。 我决定使用Swing。我在JPanel中有一个背景图,我画了在铁路上移动的小圆圈。如果我只有一列火车,它会非常完美,但是我想增加更多的火车。 这是我开始做的(和工作): “go”读取一个数组列表,其中包含我的圆应该指向的坐标。 我真的不知道如何创造几列火车。我应该创建几个JPanel还是只创建一个包含所有圆圈的JPanel? 如果我记得很清楚,我应该使用线程,但我

  • 问题内容: 我有一个Python程序,当我使用退出应用程序时 ,脚本不会关闭。我的过程仍显示在运行的过程中。 为什么python线程不能关闭? 问题答案: 您需要将该线程设为守护程序线程。为此,请在调用线程的init之后添加以下行 当只有守护程序线程处于活动状态时,程序将退出,主线程当然是非守护程序的

  • 我使用PHP和Apache以及nginx作为反向代理,所有这些都在Docker上,我有几个长时间运行的调用在60秒后计时,导致504网关超时。我知道我的应用程序被成功调用,因为我正在跟踪我的PHP应用程序的日志,我可以看到它正在积极地向日志写入。每次都是60秒的超时,但我似乎不知道那个设置在哪里。 我尝试了这篇文章中的建议,但没有任何效果。我已经用一些与时间相关的设置更新了php.ini文件,并验

  • 我试图部署一个角应用程序在OpenShift与Istio作为服务网格。服务yaml: 到目前为止,一切都与http连接一起工作。为了切换到https连接,我将Red Hat Openshift服务Mesh operator安装提供的istio ingressgateway路由配置为使用passthrough 以及istio的网关资源: VirtualService指向angular app的808

  • 我不知道如何在我们的VPC中提供对AWS Lambda的出站Internet访问,同时还具有Internet网关以支持对我们VPC中某些资源的入站访问(从Internet)。 从下面提供的文档中,我了解到我们需要创建一个私有和公共子网(使用NAT),并且有一个路由表指向IGW,另一个指向NAT。 https://aws.amazon.com/premiumsupport/knowledge-cen