背景:开发评价新功能,根据业务判断,我们需要把主体代码逻辑写在B服务(evaluation评价项目),但是在B服务使用的过程中,我们需要调用A服务(task任务项目)中的暴露的dubbo接口,在B服务提供的接口中,又需要调用A服务中的暴露的dubbo接口。
为什么要调用dubbo接口:微服务的解耦,每个服务都是负责一块单一的功能
本次开发涉及项目的一个库,涉及N个表,根据代码规范,表1表2等表的各种CRUD *** 作全部在A服务(task任务项目)中,表3表4等表的各种CRUD *** 作全部在B服务(evaluation评价项目)中。在A服务中查B服务下的表时要使用dubbo接口从B服务拿数据,在B服务下查A服务下的表时,也要掉dubbo接口从A服务拿数据。
如何互相提供dubbo接口:
开发过程中:A服务[task项目]给B服务[evaluation项目]提供dubbo接口;B服务[evaluation项目]消费接口
B服务[evaluation项目]给A服务[task项目]提供dubbo接口;A服务[task项目]消费接口
主要实现:
【在A服务下】
A服务提供dubbo接口给B服务:
接口路径
org.yungu.evaluation.api.service.evaluationScoreCorrectionPermissionCheckApiService
提示:暴露的接口都在evaluationScoreCorrectionPermissionCheckApiService中
实现类:
org.yungu.teaching.task.biz.service.impl.evaluation.evaluationScoreCorrectionPermissionCheckApiServiceImpl
提示:暴露的接口的实现都在evaluationScoreCorrectionPermissionCheckApiServiceImpl中
provider.xml中暴露接口:
提示:
B服务消费这个接口:
在B服务的consumer.xml中
【在B服务下】
B服务提供A服务接口给A服务
第一步:
在这个evaluation-api下提供dubbo接口
org.yungu.evaluation.api.service.evaluationScoreCorrectionContentApiService
提示:暴露的接口都在evaluationScoreCorrectionContentApiService中
第二步:写实现类
在evaluation-impl下提供实现类
org.yungu.evaluation.service.impl.evaluationScoreCorrectionContentApiServiceImpl
提示:暴露的接口的实现都在evaluationScoreCorrectionContentApiServiceImpl中
第三步:爆露dubbo接口
提示:
A服务消费这个B服务的接口
互掉完毕,开发完毕,开始打包问题。
=====================第二个问题 打包问题======================
本地和日常和线上打包的区分:
SNAPSHOT 中文:快照
RELEASE 中文:发布
本地环境和日常环境时开发时:一般使用快照包;
线上环境时使用发布包;
打包只打Api就可以
打线上包前的版本情况如下:
1.打包情况
本地开发和日常的打包版本查看,在项目最外层的build.gradle中(我是gradle项目,你如果是maven也在最外的配置中):
A服务[task项目]:此时直接打包会打成2.7.0的快照包
ext { // 日常 jarVersion='2.7.0' projectProfile = 'SNAPSHOT' // 线上正式包 // jarVersion='2.4.7' //projectProfile = 'RELEASE' }
B服务[evaluation项目]:此时打包会打成0.4.3的快照包
ext { //SNAPSHOT jarVersion='0.4.3' projectProfile = 'SNAPSHOT' //RELEASE //jarVersion='0.0.4' //projectProfile = 'RELEASE' //..... }
2.引包情况:
本地开发和日常开发使用的都是快照包,上一个版本的正式包都暂时被注释掉了
A服务[task项目]在日常引用的B服务[evaluation]的api的jar包:
compile("xxx.xxx:evaluation-api:0.4.3-SNAPSHOT") //compile("xxx.xxxx:evaluation-api:0.0.4-RELEASE")
B服务[evaluation]在日常引入的是A服务[task]的api的jar包是:
compile("xxx.xxxxx:teaching-task-api:2.7.0-SNAPSHOT") //compile("xxx.xxxx:teaching-task-api:2.4.7-RELEASE")
在提交git前:如何发布正式包
背景:2个服务的dubbo互相掉用情况下,打包比较复杂
第一步:A服务[task项目]:
①提交自己的代码 : add、commit、push到自己的远程
②切换到develop分支,pull下develop的最新的代码(在idea右侧最上面,有个下拉箭头,直接点击)
③切换回自己的分支,pull develop的远程代码(可能需要合并冲突) - - 成功之后,最后push推到自己的远程分支上
④把日常的打包注释掉,把线上的打包放开 (为了打发布包)
记得了解目前的develop的线上包的版本,版本号修改+1
ext { // 日常 //jarVersion='2.7.0' //projectProfile = 'SNAPSHOT' // 线上正式包 jarVersion='2.4.8' projectProfile = 'RELEASE' }
⑤修改完毕,点击publish,我们只用把api打到包中即可
此时:A服务task打的线上包2.4.8成功,但是这个包还有瑕疵,因为引入了B服务的包,此时引的还是快照包,需要换成B服务的线上包,但是B服务的线上包还没打
第二步:去B服务
①把日常的打包注释掉,把线上的打包放开 (为了打发布包)
ext { //SNAPSHOT //jarVersion='0.4.3' //projectProfile = 'SNAPSHOT' //RELEASE jarVersion='0.0.5' projectProfile = 'RELEASE' //..... }
②把引入的A服务的快照包修改为刚打的线上的包
//compile("xxx.xxxxx:teaching-task-api:2.7.0-SNAPSHOT")
compile("xxx.xxxx:teaching-task-api:2.4.8-RELEASE")
③打包,publish,只打api下的包即可
第三步:回到A服务
①把A服务引的B服务的快照包修改为线上包
//compile("xxx.xxx:evaluation-api:0.4.3-SNAPSHOT") compile("xxx.xxxx:evaluation-api:0.0.5-RELEASE")
②重新打包,本次不改版本,A服务的线上包还是2.4.8,因为B服务已经引过了
第四步:
推送到远程分支
提交git合并请求
负责人合并merge,打Jenkins包,k8s更换镜像,审批和执行本次需要的sql。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)