2

假设我在 Mule ESB 中处理 3 种(非常)不同的消息格式,我将它们称为 A、B 和 C。它们可能是 XML(通过套接字)、一些自定义文本格式和 SOAP 传输另一种例如,XML(与通过套接字传输的不同)。它们都可以相互转化。A、B 和 C 携带相同的信息,只是格式不同。

他们每个人在流程中都有自己的入口点,一些格式验证等。

但是,我需要在所有这些中执行一些(很多)逻辑,例如处理/提取一些信息,基于内容的路由,丰富等。

我该怎么办?我的意思是,我对集成模式进行了一些研究,但没有发现任何关于这种情况或类似情况的信息。

更简单的方法听起来像是采用一种格式(让我们采用 B)作为我的“主要流程”的“默认”之一,并基于它实现所有常见逻辑。然后,到达的每条消息都将转换为 B,然后再次转换为目标格式,即使两个点使用相同的格式。

例子:

1)一个“A”命中了我的应用程序,然后它被转换为“B”来执行通用逻辑,然后它再次被转换为“A”来交付。

2)一个“C”命中我的应用程序,然后它被转换为“B”来执行通用逻辑,然后它被转换为“A”来交付。

然后,我的问题是,Mule 是否有一个功能可以为我提供更好的方法来做这样的事情,或者上面的解决方案看起来很合理?

提前致谢。

4

1 回答 1

3

有几个选项,其中任何一个都可以在 Mule 中实现。前两个接近你的建议。

规范化器:http ://eaipatterns.com/Normalizer.html

规范数据模型:http ://eaipatterns.com/CanonicalDataModel.html

路由单:http ://eaipatterns.com/RoutingTable.html

信封:http ://eaipatterns.com/EnvelopeWrapper.html

您使用哪个取决于您的消息以及您需要对它们执行的操作。

例如,使用规范数据模型,您可以为每种传入类型构建一个单独的流:

  • 以自己的格式接收对象。
  • 将该对象转换为规范对象。
  • 将该消息传递到主处理流。

主要流程只需要知道如何处理该对象。

任何需要原始对象的端点都将位于可以反转转换的转换器后面。

您可以选择一个现有对象并使用消息变量来记住原始格式或创建一个记住原始类型本身的新对象。

于 2013-08-08T06:44:15.533 回答