Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在微服务之间传递对象_Php_Oop_Soa_Microservices - Fatal编程技术网

Php 在微服务之间传递对象

Php 在微服务之间传递对象,php,oop,soa,microservices,Php,Oop,Soa,Microservices,我正在尝试将一块巨石的某些部分移动到外部服务。到目前为止,我喜欢这个想法,而且将所有相关功能封装在一个应用程序中似乎要干净得多。不同的应用程序使用RabbitMQ进行通信 我在一个服务中有一个用户对象。如果我想在服务中使用这个完全相同的类,我可以轻松地序列化它并在消息体中发送序列化对象。但是,由于发送方和接收方都需要包含user类,所以我必须共享一个库,其中包含用户对象的一些表示(尽管对我来说,将真正的用户对象放在库中似乎很奇怪,因为它是主应用程序的核心)。我想我也可以传递一个带有user键和已

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

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

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

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


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

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

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

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