微服务调用及共用实体类怎么解决

本文解决跨服务调用时实体类和接口重复定义的问题,通过将共用实体类与接口置于commonApi模块并打包成jar,实现producer与customer服务间高效复用,简化调用流程。

承接上一篇:SpringBoot利用AOP拦截自定义注解(以日志为例)

       调用服务一般是在customer里写个接口,接口里写上producer中controller里的方法(注意路径也要与controller中的一致),然后让其他类通过这个接口调用另一个服务的方法。

       但这里有个问题:如果调用服务者要用到被调用服务者的实体类怎么办?比如我写了个操作日志数据库的服务(称为producer),然后在订单服务(称为customer)中需要写个拦截器获取这个对订单操作的日志,然后调用producer服务来存入数据库中。

       总结为三个问题是:(1)customer将获取到的日志信息要进行set到producer实体类中的属性里,但是又不能在customer里写个producer实体类,否则太冗余了。(2)在customer的接口里再写一遍producer中的方法名和路径很麻烦,还容易出错。(3)这样还暴露了producer中的方法实现。

        所以本文用到了一个抽取为jar包的方法。具体做法是:

       将producer和customer都用到的实体类写在commonApi里,并且将producer中的controller类的接口(这样的话controller类就是这个接口的实现类了)也写在commonApi里,路径也是写在这个接口里,然后将这个接口打成jar包,producer和customer分别引入这个jar包。Producer中的controller去实现这个接口(这样controller里不用写路径了),customer里的接口去继承这个接口即可。如下:

commonApi:

Producer:

Customer:

然后其他方法要用时,注入就行了:

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值