两个服务之间如何互掉dubbo接口和打线上包?

两个服务之间如何互掉dubbo接口和打线上包?,第1张

两个服务之间如何互掉dubbo接口和打线上包?

背景:开发评价新功能,根据业务判断,我们需要把主体代码逻辑写在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。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5718833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存