是否可以在微服务应用程序中代理 POJO?



我想避免在微服务应用程序中复制我的 POJO,所以我想知道是否有办法做到这一点(如代理(?

我的意思是,Service A有没有办法访问Service B中定义的 POJO(或其他类/接口(,而无需在Service A中物理创建这些 POJO 类文件?

微服务架构中最大的挑战就是这一点,我没有找到解决它的方法。

"简单":当有两个服务应该使用共同的东西时 - 那么答案是将此代码移动到某种形式的库中,并使两个服务都依赖于它。

其他任何事情都很可能是一个主意。微服务的整个思想是服务A以任何形式依赖于B。而且您不想进入反射游戏并通过某种后门以某种方式访问另一个服务的内部。

正如一些评论所明确指出的那样:使用库有助于避免代码重复。另一种方法是故意将"公共"部分从服务 B 复制到服务 A 中。这也是一种选择。

从这个意义上说:您要么将公共部分重构到库中 - 要么复制它们。这两种方法都有其优点和缺点。您必须确定环境中最重要的内容。

遵循以下经验法则:

对于企业应用程序和复杂对象,请创建一个第 3 个项目(API 项目(,并将其作为依赖项在服务之间共享。

对于简单自描述的对象,请在每个服务中使用相同对象的"副本"; 请注意,这很强大,因为 POJO 不需要相同;

例如:

在一个服务 (A( 中,它可能如下所示:

@Entity
public class ExchangeValue {
@Id
private Long id;
@Column(name = "currency_from")
private String from;
@Column(name = "currency_to")
private String to;
@Column(name = "conversion_multiple")
private BigDecimal conversionMultiple;
...
}

在另一个服务(B(中,它可以短得多,并且具有不同的类型:

public class ExchangeValue {
private int conversionMultiple;
...
}

最新更新