【问题标题】:Spring Integration modeling issueSpring集成建模问题
【发布时间】:2021-06-21 02:28:04
【问题描述】:

我是 Spring Integration 框架的新手,所以我对我需要实施的当前工作流程有疑问。不知道如何为此进行适当的建模。以下是需要完成的步骤:

  1. 为新到达的 XML 文件轮询文件系统目录(使用 入站通道适配器)。文件结构类似于下一个:
<user>
    <name>Steve</name>
    <email>steve@steve.com</email>
    <dateOfBirth>01.01.1990</dateOfBirth>
    <documents>
        <document>
            <fileName>test.pdf</fileName>
        </document>
        <document>
            <fileName>test.mp3</fileName>
        </document>
        <document>
            <fileName>image.png</fileName>
        </document>
        <document>
            <fileName>test2.pdf</fileName>
        </document>
    </documents>
</user>
  1. 当轮询 XML 文件时,检查 documents 元素 这些(pdf、mp3、图像...)是否存在于轮询目录中。 如果不抛出错误并更改 XML 文件的扩展名。
  2. 如果一切正常,收集这些文件并将其发送到 第三方系统(自定义、独立的java库)用于 优化。
  3. 如果优化做得好,我们需要读取 XML 和其中的数据 创建一个将被发送到另一个系统进行插入的对象 将 API 与这些优化的文件一起使用。
  4. 如果插入顺利,我们需要更改 XML 文件 根据元素的值插入新元素。取决于 值 XML 文件将被修改并移动到新文件夹 该文件中包含的所有优化文档。

这是一个很好的 Spring 集成用例吗?我不确定如何正确建模此工作流程。你能给我一些建议吗?

提前致谢

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    您的设计是正确的,Spring Integration 及其所有 EIP 实现(包括 MessageChannel 抽象和一组特定于协议的通道适配器和网关)确实可以帮助实现企业中的任何可能任务。

    我们无法在这里为您实现所有功能。另外,您问题中的某些项目可能值得拥有自己的 SO 线程。但我会尝试为您提供一些链接,在这些链接中可以找到可以帮助您继续解决问题的信息。

    首先,如果您阅读了EIP Book 以了解您将要使用的库中的所有术语和可能的组件,那就太好了。

    然后您转到 Spring Integration Reference Manual 并扫描它以查找可以帮助您在设计中实现特定任务的组件。

    让我们看看根据您的描述和要求有什么可能!

    1. 您可以使用 FileReadingMessageSource: https://docs.spring.io/spring-integration/docs/current/reference/html/file.html#file-reading 轮询本地文件系统以获取新文件

    2. 要获取该 XML 文件的内容,尤其是 &lt;documents&gt; 标记,您可以使用 XPathTransformerhttps://docs.spring.io/spring-integration/docs/current/reference/html/xml.html#xml-xpath-transformer。然后将其拆分为文件名列表:https://docs.spring.io/spring-integration/docs/current/reference/html/message-routing.html#splitter。下一个应该是一个普通的转换器来创建一个java.io.File 对象或FileInputStream 或其byte[]https://docs.spring.io/spring-integration/docs/current/reference/html/message-transformation.html#messaging-transformation-chapter

    3. 我们不确定您如何与第三方系统连接,因此请确保您知道选择什么进行网络交互。它可能是一个常规的 REST 服务,所以你使用 HttpRequestExecutingMessageHandler,如果是纯 TCP/IP 连接,则使用 TcpOutboundGateway 等等。您确实可以在 Spring Integration 中找到足够多的特定于协议的通道适配器实现:https://docs.spring.io/spring-integration/docs/current/reference/html/endpoint-summary.html#spring-integration-endpoints

    4. & 5. 看起来更像是最后需要处理 XML unmarshalling 和 marshaling:https://docs.spring.io/spring-integration/docs/current/reference/html/xml.html#xml-transformation

    对于错误处理,您可以考虑将一些调用包装到 @MessagingGateway 中,并使用其 errorChannel 支持:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#gateway。或者只是将ExpressionEvaluatingRequestHandlerAdvice 添加到特定端点,以完全根据该特定逻辑模拟try..catchhttps://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#message-handler-advice-chain

    有关一些想法,另请参阅 Spring Integration Samples

    您可能会有更多问题,但请考虑将它们作为单独的最具体的 SO 线程,这样我们就不会因为不相关的信息而污染这个线程。

    【讨论】:

      猜你喜欢
      • 2014-08-06
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多