我想避免在微服务应用程序中复制我的POJO,所以我想知道是否有办法(如代理)?
我的意思是,Service A
是否有办法访问Service B
内定义的POJO(或其他类/接口)而无需在Service A
中物理创建这些POJO classe文件?
微服务架构面临的重大挑战就是这一点,我找不到解决问题的方法。
答案 0 :(得分:7)
"简单":当有两个服务应该使用 common 时 - 然后答案是将此代码移动到某种形式的库并且两种服务都依赖于它。
其他任何东西很可能都是糟糕的想法。微服务的整个想法是服务A以任何形式不依赖于B.你做不想要进入反射游戏并以某种方式访问内部通过某种后门的另一种服务。
正如一些评论所表明的那样:使用库有助于避免代码重复。另一种方法是任意复制"普通"从服务B到服务A的部件。这也是一种选择。
从这个意义上说:你要么将公共部分重新考虑到库中 - 要么复制它们。两种方法都有其优点和缺点。您必须确定环境中最重要的内容。
答案 1 :(得分:0)
遵循以下经验法则:
对于企业应用程序和复杂对象,创建第三个项目(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;
...
}