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

时间:2017-07-27 12:45:39

标签: java spring-boot microservices

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

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

微服务架构面临的重大挑战就是这一点,我找不到解决问题的方法。

2 个答案:

答案 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;
    ...
}