【问题标题】:Passing objects between microservices在微服务之间传递对象
【发布时间】:2016-02-28 20:16:54
【问题描述】:

我正在尝试将单体架构的某些部分移至外部服务。到目前为止,我喜欢这个想法,将所有相关功能封装在一个应用程序中似乎更简洁。不同的应用程序使用 RabbitMQ 进行通信。

我在一项服务中有一个用户对象。如果我想在服务中使用这个完全相同的类,我可以轻松地对其进行序列化并在消息正文中发送序列化对象。但是由于发送者和接收者都需要包含用户类,我将不得不共享一个包含用户对象的一些表示的库(尽管对我来说将真实的用户对象放入库中似乎很奇怪,因为它是主应用程序的核心)。我想我也可以只传递一个带有 user 键和定义键值的数组。

我也在想,如果有一天我用 PHP 以外的东西创建服务,那么它将无法反序列化用户对象,因此无法访问消息中的数据。

所以基本上我喜欢在服务之间传递实体并能够在接收端将它们作为对象使用的想法,但我不确定这是否是正确的方法。

我的问题是在这些服务之间传递对象的最佳方式是什么?

【问题讨论】:

    标签: php oop soa microservices


    【解决方案1】:

    首先恕我直言,您不应该通过 jar 在您的微服务之间共享这些域对象。实际上,您不应该以任何方式共享您的域对象。它可以使可维护性和部署过程成为您的噩梦。相反,您可以在微服务中拥有某种数据传输对象 (DTO)。

    最好的可移植和健康的通信方式可能是使用一些可互操作的序列化机制,例如使用 json 或 xml。

    最后,如果您并不真正需要微服务,那么从长远来看,它可能难以管理。因此,仅仅因为它听起来更干净就使用它根本不是一个好主意。当然,如果您有一个复杂且大型的项目,那么您可以去做。

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 2019-07-09
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多