在微服务之间传递对象

Passing objects between microservices

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

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

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

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

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

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

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

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