体系结构 – 由微服务提供的SOA – 如何规范化/转换消息

我们正在开发适应消息模式和微服务的解决方案来定义和运行业务流程.

它应该有这样的组件:

>使用给定流量ID启动交易的网关,
> BPM存储规则(应为给定流程调用哪些服务)
>服务选择器 – 一种处理器,它从网关获取请求,获取流量定义然后逐个调用适当的服务,
>功能服务.

我们应该能够定义多个流程,其中每个步骤都是调用不同的服务.

可以输入一个服务的输出用于另一个服务.问题是它们可以有不同的模式,因此它应该以某种方式进行转换/规范化.

但是哪个部分应该负责做这样的转变?它应该是可配置的,因为我们希望在不重新部署的情况下添加新流.

第一个想法是存储来自每个服务的响应,然后每个步骤将使用XSLT转换从先前的响应中生成输入xml.但它可能是配置地狱,因为创建和测试这样的XSLT并不容易

您有什么建议如何正确解决这个问题?

最佳答案 假设您有多个系统提供服务,请使用规范数据模型以避免在中间件中嵌入转换.
Here is a link to Gregor Hohpe’s enterprise integration patterns site about canonical models.

a Canonical Data Model that is independent from any specific
application. Require each application to produce and consume messages
in this common format.

这个想法是有一个商定的标准,服务用于互操作.通常,提供服务的每个系统都有自己的内部数据模型,该模型与规范模型不同.发生这种情况是因为更改遗留系统过于繁琐,或者规范模型不适合系统的内部数据表示.然后,每个系统单独负责将其内部模式转换为服务I / O的规范模型.

每个系统团队都可以使用它想要执行转换的任何工具:XSLT,Python脚本,Java或Oracle或Microsoft的一些WYSIWYG工具.结果是任何内部数据模型与规范模型不同的系统必须执行一些映射.这是不可避免的.

点赞