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

收件人列表路由器Spring集成

公冶弘壮
2023-03-14

我是spring Integration的新手。在spring integration的配置中,我有:

  <int:chain input-channel="channel1_2" output-channel="channel1_3">
    <int:service-activator>
        <bean class="com.csv.CSVEntreprise"/>
    </int:service-activator>
</int:chain>

<int:channel id="channel1_3"/>

<int:recipient-list-router id="id-entreprise" input-channel="channel1_3">
    <int:recipient channel="channel1_3TRUE" />
    <int:recipient channel="channel1_3FALSE"/>
</int:recipient-list-router>

<int:channel id="channel1_3TRUE"/>
<int:channel id="channel1_3FALSE"/>

在CSVEntreprise类中,我用布尔返回定义了方法,我希望当它返回true时使用通道channel1_3TRUE,当它返回false时使用通道channel1_3FALSE?

共有1个答案

轩辕庆
2023-03-14

您可能需要考虑使用标头值路由器(http://docs.spring.io/spring-integration/reference/html/messaging-routing-chapter.html)。

您可以使用CSVEnterprise bean来设置MessageHeaders中的布尔值。

您的@ServiceActivator应该设置标头的值:

return MessageBuilder.withPayload(message)
                    .setHeader("MY_HEADER", Boolean.FALSE).copyHeadersIfAbsent(headers).build();

然后,使用一个标头值路由器来确定将订单路由到哪个通道。

<int:header-value-router input-channel="channel1_3" header-name="MY_HEADER" id="headerValueRouter">
    <int:mapping value="true" channel="channel1_3TRUE"/>
    <int:mapping value="false" channel="channel1_3FALSE" />
</int:header-value-router>
 类似资料:
  • 我对SI是个新手,但现在已经读了很多书了。我必须从flow再打一个电话,那已经实现了。我需要这个调用是不阻塞的,这样链就不会等待它的执行-它被发送到另一个系统,可能是关闭的。 我需要向2个通道发送一条消息,所以我不带任何条件地使用了收件人-列表-路由器。 在完成后,将调用。这很好,但问题是,输入也会等待完成,即使我使用的是Executor通道也应该是异步的。 和,其中前缀来自http://www.

  • 我使用的是spring Boot2.2.4-Release和spring integration 5.2.3,我使用的是IntegrationFlow和DSL,因为我需要配置几个IMAP服务器。 所以我写了这段代码: 其中是 通过设置,我可以在处理程序组件中处理,但我有一些问题。 null 我不知道是否应该做什么来告诉框架关闭文件夹 谁能给我提点建议吗? 谢谢你

  • 我有一个解压缩和文件的要求,并处理它的内容。在zip文件中,可以有两种类型的文件个人或公司。可以通过文件名区分的。在处理完所有文件后,它应该调用另一个程序模块,并将处理后的文件存档在不同的位置。希望使用Spring集成相同。我试图通过下面的代码来实现这一点,但它在基于文件名的路由时产生了问题。我使用的是JDK 8,Spring 5 例外 下面是整个代码段

  • 有时你需要在一个表单中以单一的形式处理多个模型。例如,有多个设置, 每个设置存储为一个 name-value,并通过 Setting 活动记录 模型来表示。这种形式也常被称为“列表输入”。与此相反, 处理不同模型的不同类型,在 多模型同时输入章节中介绍。 下面展示了如何在 Yii 中收集列表输入。 在三种不同的情况下,所需处理的略有不同: 从数据库中更新一组固定的记录 创建一个动态的新记录集 更新

  • 我有一个队列通道和一个链,轮询器和任务执行器在该通道上“监听”,并行执行一些处理。我想做的是以这样一种方式配置它,我可以根据一些逻辑/属性路由特定消息,以确保特定消息“类型”始终由任务执行器的特定线程处理。 示例:消息,其中:

  • 基于spring集成的转换器使用来自一个系统的消息,检查、转换并将其发送到另一个系统。 如果目标系统关闭,我们将停止入站适配器,但也希望在本地保留或转发当前“正在运行”的转换消息。为此,只需将消息从正常输出通道动态地重新路由到某个“备份”通道。 在文档中,我只找到了根据消息头路由消息的选项(因此,在流程之前的某个步骤中,一旦targer系统不可用,我将不得不动态添加这些消息),或者基于有效负载类型