10.1.1 使用 XML 定义集成流

尽管在本书中我避免使用 XML 配置,但 Spring Integration 在 XML 中定义的集成流方面有着悠久的历史。因此,我认为值得至少展示一个 XML 定义的集成流示例。下面的程序清单显示了如何在 XML 中配置流。

程序清单 10.2 使用 Spring XML 配置定义集成流

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:int="http://www.springframework.org/schema/integration"
  xmlns:int-file="http://www.springframework.org/schema/integration/file"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/integration
    http://www.springframework.org/schema/integration/spring-integration.xsd
    http://www.springframework.org/schema/integration/file
    http://www.springframework.org/schema/integration/file/spring-integration-file.xsd">

  <int:channel id="textInChannel" />

  <int:transformer id="upperCase"
    input-channel="textInChannel"
    output-channel="fileWriterChannel"
    expression="payload.toUpperCase()" />

  <int:channel id="fileWriterChannel" />

  <int-file:outbound-channel-adapter id="writer"
    channel="fileWriterChannel"
    directory="/tmp/sia6/files"
    mode="APPEND"
    append-new-line="true" />
</beans>

分析一下程序清单 10.2 中的 XML:

  • 配置了一个名为 textInChannel 的通道,这与为 FileWriterGateway 设置的请求通道是相同的。当在 FileWriterGateway 上调用 writeToFile() 方法时,结果消息被发布到这个通道。
  • 配置了一个转换器来接收来自 textInChannel 的消息。它使用 Spring Expression Language(SpEL)表达式在消息有效负载上调用 toUpperCase()。然后将大写操作的结果发布到 fileWriterChannel 中。
  • 配置了一个名为 fileWriterChannel 的通道,此通道用作连接转换器和外部通道适配器的管道。
  • 最后,使用 int-file 命名空间配置了一个外部通道适配器。这个 XML 命名空间由 Spring Integration 的文件模块提供,用于编写文件。按照配置,它将接收来自 fileWriterChannel 的消息,并将消息有效负载写到一个文件中,该文件的名称在消息的 file_name 头中指定,该文件位于 directory 属性中指定的目录中。如果文件已经存在,则将用换行来追加文件,而不是覆盖它。

图 10.1 显示了该流程,使用了与《企业级集成模式》中图形元素样式相同的图形。

图 10.1 文件写入集成流程

该流由五个组件组成:网关、两个通道、转换器和通道适配器。这些只是可以组装成集成流的组件的一小部分。我们会在第 10.2 节中探索这些组件以及 Spring Integration 支持的其他组件。

如果希望在 Spring Boot 应用程序中使用 XML 配置,则需要将 XML 作为资源导入 Spring 应用程序。最简单的方法是在应用程序的 Java 配置类上使用 Spring 的 @ImportResource 注解:

@Configuration
@ImportResource("classpath:/filewriter-config.xml")
public class FileWriterIntegrationConfig { ... }

尽管基于 XML 的配置很好地服务于 Spring Integration,但大多数开发人员对使用 XML 越来越谨慎。(正如我所说的,我在本书中避免使用 XML 配置)让我们把这些尖括号放在一边,将注意力转向 Spring Integration 的 Java 配置风格。

results matching ""

    No results matching ""