【问题标题】:How to design a canonical data model in a distributed platform?如何在分布式平台中设计规范的数据模型?
【发布时间】:2013-08-07 08:25:11
【问题描述】:

我正在尝试为我正在开发的分布式平台定义规范数据模型,该模型基于以下架构:

  • RESTful API 外观,向客户端公开功能
  • 一个底层中间件,基于 Apache Camel,用于路由和转换客户端请求
  • 中间件调用的 RESTful 业务服务

这个想法是让外观层将传入的请求转换为公共信息模型,该模型具有带有标头和有效负载的自定义消息的形式:

  • 标头应包含中间件 (Apache Camel) 所需的信息,以便将消息路由到所请求的工作流(因此基本上,外观知道应该调用哪个业务流程来处理来自客户端的每个传入请求) .它可以建模为枚举映射或表示自定义消息的类的一组属性。
  • 有效负载应该包含一个适当的 Java bean,代表传入请求的“业务模型”(例如 TicketOrder 或 Customer 对象)。它可以建模为表示自定义消息的类中的 Object 属性,并且参与管理该消息的工作流的 Camel 的所有处理器/转换器都应该期待该有效负载类型(选定的 Java bean)。

简而言之,我正在尝试为中间件定义一个业务数据模型,该模型仅包含 Camel 处理传入请求并将它们路由到业务服务所需的相关信息。该数据被建模为 Java bean 并作为有效负载附加到消息中,其标头包含对 Camel 有意义的路由详细信息。

您将如何改进上述解决方案?你会说这是一个很好的方法并且足够灵活吗?非常感谢。

【问题讨论】:

    标签: rest jakarta-ee apache-camel soa eai


    【解决方案1】:

    如果您使用 Camel 作为(轻量级)ESB,我认为没有太多需要担心的事情。在骆驼路线中,您可以只保留最适合这种情况的格式,您甚至可以为某些解决方案并行运行多个格式(例如,您可以使用 Java Bean 来执行一些业务逻辑,但您也可以使用 XSTL将消息转换为 XML 和 XPath 以获得更好的解耦并进行一些处理 CBR)。

    如果您需要大量使用 Java Bean 模型,我建议您创建一个可以从 JSON 中提取模型的项目,这样您就可以控制该工件的版本(例如,使用 Maven)这可能是 Java 应用程序的规范模型(如果 JSON 请求发生很大变化,您将需要更新此项目)。创建 Java 数据模型项目并使用 OSGi 容器将为您带来更多解耦的好处,因为 OSGi 可以为不同的应用程序使用不同版本的模型。

    问候, 栾

    【讨论】:

    • 感谢您的回复。我确实将 Camel 用作“轻量级 ESB”,其想法是迟早会迁移到完整的 SOA 平台。我知道 Camel 足够灵活,可以让我使用不同的数据格式,实际上它是一个集成框架。我的问题需要一个更“务实”的答案,即:建议的模型是一个好用的模型吗?我应该使用地图、对象(例如作为 DTO 的 java bean)还是其他方法(以 JSON 表示的自定义有效负载等)?基本上我需要对提议的设计进行一些验证,以及它的替代方案:) 非常感谢!
    猜你喜欢
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2020-06-05
    • 2012-10-01
    相关资源
    最近更新 更多