微服务和JPA

4
我喜欢微服务的想法,并认为我理解了基本想法。 我想建立一个微服务系统,其中每个服务都是一个独立的spring-boot项目。例如,有两个服务,Service-A和Service-B。B具有一些JPA实体,而A使用RestTemplate向B发送请求。 RestTemplate.getForObject(...)需要返回的类类型。那么我必须在Service-A中(单独的项目)也包含实体类,还是有更好的方法将实体值发送到其他服务? 希望我的问题已经解释得足够清楚。

嗨Throum,欢迎来到Stack Overflow,请您发布代码,这样我就可以帮助您理解了吗? - WoodChopper
1个回答

1
我见过两种处理方式:
1)定义共享复杂类型的通用库 - 您有一个服务A的项目和一个服务B的项目,您还需要一个lib-alpha项目,可能还需要另一个lib-beta项目等。这将是多个服务可以利用的特定领域复杂类型的Java实现。
2)制作一份文档完备的API,并让消费者自行解决问题 - 这通常涉及定义高级数据编码方案(使用XML、JSON等),并在发送到API提供者之前在Service A中序列化数据,然后在接收时对其进行反序列化。

3
在微服务中,共享代码并不是你想要做的事情。整个重点是使它们完全隔离。你在这里描述的更像是在常规SOA系统中所做的事情。 - Gimby
1
事实上,我们在微服务中经常使用共享代码,只是使用社区提供的公共库。我发现,在大规模的领域驱动微服务架构中,为诸如横切数据结构之类的内容识别共享库是解决方案设计范围内的一部分。 - AlVaz
1
那不是一个公平的比较;第三方库并没有包含你内部定义的模型。对它的更改很少会引起冲突。 - Gimby
我不同意@user625488的观点。横切关注点是存在的。横切关注点的存在并不意味着整个业务领域都是单一边界上下文。您必须有一种机制来建模横切关注点,无论是数据、算法还是输入/输出。 - AlVaz
@AlVaz,你能给一些例子吗?通常,我所知道的横切关注点与业务域无关。对于这些问题使用共享库是完全可以的。但是,在微服务中,如果你在每个微服务中以不同的方式解决这些非业务相关的问题,也没有问题。 - user625488
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接