从另一个微服务获取对象并将其映射到现场的最佳方式



我有2个基于spring-boot框架的应用程序。我需要按 id 将对象从另一个微服务映射到字段。我的pojo课程:

@Entity
@Table(name = "sample_object")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Data
@NoArgsConstructor
@EqualsAndHashCode(exclude = "id")
public class SampleObject {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "SAMPLE_FIELD")
private String sampleField;
/**
* ID to get large object from another microservice
*/
@Column(name = "LARGE_OBJECT_ID")
private String largeObjectId;
/**
* That object i will get from another microservice
*/
@Transient
private LargeObject objectFromAnotherService;
}

我不想通过其余请求来获取它,因为我有大约 60.000+ 个对象,我认为发送这么多请求不是一个好主意。所以,我的问题是:获取对象并将其映射到我的实体的最快方法是什么?如果此映射可以与对象创建过程同时发生,那就太好了。

您可以在数据库中拥有此实体的副本,并注意使其与其他微服务保持同步(如有必要¹(。

因此,您需要创建一个具有相同字段的新实体,与SampleObject建立对SampleObject实体更有意义的关系。喜欢:

@ManyToOne
private LargeObject objectFromAnotherService;

可以将largeObjectId移至此新实体。因此,在创建 SampleObject 实体之前,请向另一个微服务发出请求,以获取 LargeObject 数据并创建 SampleObject 和 LargeObject 实体。

另一种选择是将所有字段从 LargeObject 直接映射到 SampleObject,而无需为此创建独占类。我不知道您的问题的背景,但这种方法在很多情况下都是有意义的。

要小心这种情况:如果这两个微服务彼此需要这么多,也许它们需要在一起而不是分开。

¹. 这称为最终一致性。由于没有提到是否有必要的问题,我只是让这个脚注作为参考

最新更新