在微服务之间传递对象


Passing objects between microservices

我正在尝试将整体结构的某些部分移动到外部服务。到目前为止,我喜欢这个想法,而且将所有相关功能封装在一个应用程序中似乎要干净得多。不同的应用程序使用RabbitMQ进行通信。

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

我还认为,如果有一天我用PHP以外的东西创建了一个服务,那么它将无法取消用户对象的序列化,从而无法访问消息中的数据。

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

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

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

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

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