假设我正在 Mule ESB 中处理 3 种(非常)不同的消息格式,我将它们称为 A、B 和 C。它们可以是 XML(通过套接字)、一些自定义文本格式和 SOAP 传输例如,另一种 XML(与通过套接字传输的不同)。它们都可以相互转化。 A、B、C 携带相同的信息,只是格式不同。
它们中的每一个都将在流程中拥有自己的入口点、一些格式验证等。
但是,我需要在所有这些逻辑中执行一些(很多)逻辑,例如处理/提取一些信息、基于内容的路由、丰富等等。
我该怎么办?我的意思是,我对集成模式做了一些研究,但没有发现任何有关这种情况或类似情况的信息。
更简单的方法听起来像是采用一种格式(让我们采用 B)作为我的“主流”的“默认”格式之一,并基于它实现所有通用逻辑。然后,每条到达的消息都将转换为 B,然后再次转换为目标格式,即使这两个点使用相同的格式。
示例:
1)一个“A”点击了我的应用程序,然后它转换为“B”来执行公共(public)逻辑,然后它再次转换为“A”来交付。
2)一个“C”击中了我的应用程序,然后它转换为“B”来执行公共(public)逻辑,然后它转换为“A”来交付。
然后,我的问题是,Mule 是否有一个功能可以为我提供更好的方法来做这样的事情,或者上面的解决方案看起来很合理?
提前致谢。
最佳答案
有几个选项,其中任何一个都可以在 Mule 中实现。前两个与您的建议很接近。
标准化器:http://eaipatterns.com/Normalizer.html
规范数据模型:http://eaipatterns.com/CanonicalDataModel.html
路由表:http://eaipatterns.com/RoutingTable.html
信封:http://eaipatterns.com/EnvelopeWrapper.html
您使用哪个取决于您的消息以及您需要对它们执行的操作。
例如,使用规范数据模型,您可以为每种传入类型构建单独的流程:
- 接收其自己格式的对象。
- 将该对象转换为规范对象。
- 将该消息传递到主处理流程。
主流程只需要知道如何处理该对象。
任何需要返回原始对象的端点都将位于可以反转转换的转换器后面。
您可以选择现有对象之一并使用消息变量来记住原始格式或创建一个记住原始类型本身的新对象。
关于integration - mule中如何处理3+消息格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18104264/