我是spring集成框架的新手,所以我对当前需要实现的工作流有疑问。不知道该怎么做正确的建模。以下是需要完成的步骤:
为新到达的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>
在轮询xml文件时,检查 documents
元素(pdf、mp3、图像…)是否存在于轮询目录中。如果不是,则抛出错误并更改xml文件的扩展名。
if everything ok收集这些文档并将它们发送到第三方系统(定制的、独立的java库)进行优化。
如果优化做得很好,我们需要读取xml并从其中的数据创建一个对象,该对象将被发送到另一个系统,以便使用api插入这些优化的文件。
如果插入顺利,我们需要通过根据元素的值插入新元素来更改xml文件。根据值的不同,xml文件将被修改并移动到包含该文件中所有优化文档的新文件夹中。
这是spring集成的一个好用例吗?我不知道如何正确地建模这个工作流。你能给我一些小费吗?
提前谢谢
1条答案
按热度按时间cs7cruho1#
您的设计是正确的,事实上spring与所有eip实现的集成包括
MessageChannel
抽象和一组特定于协议的通道适配器和网关可以帮助实现企业中任何可能的任务。我们不能在这里为你实现一切。加上你的问题中的一些项目可能值得他们自己的线程。但我会尽量给你一些链接,在那里寻找信息,可能有助于你继续你的解决方案。
首先,如果您已经阅读了一本eip书籍,了解了库中所有的术语和您将要使用的可能组件,那将是非常好的。
然后转到SpringIntegrationReferenceManual并扫描其中的组件,这些组件可以帮助您实现设计中的特定任务。
让我们看看什么是可能的根据您的描述和要求!
您可以使用
FileReadingMessageSource
: https://docs.spring.io/spring-integration/docs/current/reference/html/file.html#file-阅读获取xml文件的内容,尤其是
<documents>
标签,你可以使用XPathTransformer
: https://docs.spring.io/spring-integration/docs/current/reference/html/xml.html#xml-xpath转换器。然后将其拆分为文件名列表: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-转变章节。我们不确定您如何与第三方系统连接,因此,请确保您知道选择什么进行网络交互。这可能是一个常规的休息服务,所以你使用
HttpRequestExecutingMessageHandler
,一个TcpOutboundGateway
如果是纯tcp/ip连接等。在spring集成中,您确实可以找到足够多的特定于协议的通道适配器实现:https://docs.spring.io/spring-integration/docs/current/reference/html/endpoint-summary.html#spring-集成终结点。& 5. 看起来您最终需要处理xml解组和封送处理:https://docs.spring.io/spring-integration/docs/current/reference/html/xml.html#xml-转变
对于错误处理,您可以考虑将一些调用 Package 到
@MessagingGateway
用它的errorChannel
支持:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#gateway. 或者只是添加一个ExpressionEvaluatingRequestHandlerAdvice
到特定端点以模拟try..catch
就在这个特定的逻辑上:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#message-处理建议链有关一些想法,请参见spring集成示例。
你可能会有更多的问题,但请考虑他们作为个人最具体的so线程,所以我们不会污染这一个非相关的信息。