微服务包含4个微服务模块:zuul-gateway模块、Eureka注册中心、dtse-system模块、obs-storage模块;其中dtse-system模块、obs-storage模块是业务模块。
用户发送请求,微服务网关(zuul-gateway)过滤器根据请求URI,路由和负载均衡请求到不同服务;同时利用JWT进行token校验请求的合法性。
Eureka注册中心管理zuul-gateway、dtse-system、obs-storage微服务状态;
dtse-system与obs-storage之间通过feign进行内部接口调用
改造技术路径
引入使用spring-cloud-huawei
使用华为云CSE服务替换Eureka注册中心的功能
使用SpringCloudGateway替换zuul网关
基线版本选择
查看spring-cloud-huawei官网地址:
通过实践master分支与openFeign存在兼容问题,所以本次实践以Hoxton为基线版本,Hoxten与openFeign不存在兼容性问题
由于SpringCloudHuawei与zuul调试中发现有兼容问题,所以将网关替换成SpringCloudGateway
JDK
Openjdk1.8.0_312
Maven
3.6.3
IDEA
2021.2.2
CSE
Local-CSE-2.1.3-windows-amd64.zip
spring-boot
2.3.5.RELEASE
spring-cloud
Hoxton.SR9
spring-cloud-huawei
1.8.0-Hoxton
使用华为云Maven
a、删除eureka-server
b、引入华为springcloud
删除spring-cloud-starter-netflix-zuul,增加spring-cloud-starter-netflix-ribbon
出现这种问题是因为启动类找不到(扫描)其他类的路径,处理方法有多种,我这边使用的是方法二
方法一:把启动类放在其他类文件包的同一级,而不要放在上一级
方法二:在启动类的标签中加入启动扫描的路径如下:
方法三:new个IClientConfig类,不过需要初始化,不然会出现空指针
5.3.3.1.方法二指定扫描路径:
SpringBootApplication指定扫描路径
@SpringBootApplication(scanBasePackages={"com.huaweicloud.controller","com.huaweicloud.service","com.huaweicloud.commons","com.huaweicloud.persistent"})@EnableFeignClients@EnableDiscoveryClientpublicclassOBSStorageMain{publicstaticvoidmain(String[]args){SpringApplication.run(OBSStorageMain.class,args);}}5.3.3.2.方法三增加config类:
IClientConfig类,重点来了,就是这个类,如果不自己定义(openFeign是可以自定义这个类的,然后自己初始化),那么就千万不要自己去创建一个bean出来,然后自己加上注解定义成配置类如下:
@ConfigurationpublicclassIClientConfig{@BeanpublicDefaultClientConfigImpliClientConfig(){returnnewDefaultClientConfigImpl();}}这玩意千万不要在程序里自己创建出来,可能很多初学者不是很懂,一开始有配置了这个,结果又只是单纯的return了一个没有任何属性的DefaultClientConfigImpl对象,然后openFeign就会使用你创建的这个对象,结果去初始化的时候,就会在源码里面报空指针异常,把这玩意去掉,基本就可以了,如果要自己定义,那记得把里面该有的属性都要初始化值。
删除eurekaclient,引入华为serviceengine
packagecom.huaweicloud;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication(scanBasePackages={"com.huaweicloud.controller","com.huaweicloud.commons","com.huaweicloud.service","com.huaweicloud.persistent"})@EnableFeignClients//开启feign客户端调用支持publicclassSystemMain{publicstaticvoidmain(String[]args){SpringApplication.run(SystemMain.class,args);}}5.5.Dtse-zuuL-gateway网关接入使用springcloudhuawei与zuul有兼容性问题,所以切换到SpringCloudGateway
spring-boot-starter-web排除spring-webmvc包,删除spring-cloud-starter-netflix-zuul包
引入spring-cloud-starter-gateway和huawei-service-engine-gateway
修改网关配置
packagecom.huaweicloud;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication(exclude={DataSourceAutoConfiguration.class},scanBasePackages={"com.huaweicloud.config","com.huaweicloud.filter","com.huaweicloud.commons"})@EnableDiscoveryClientpublicclassSpringCloudGatewayMain{publicstaticvoidmain(String[]args)throwsException{SpringApplication.run(SpringCloudGatewayMain.class,args);}}6.前端服务接入修改vue.config.js,配置服务网关服务的端口
修改图片上传接口,和获取用户信息接口
config增加类FeignConfiguration
packagecom.huaweicloud.config;importfeign.Logger;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassFeignConfiguration{/***日志级别**@return*/@BeanLogger.LevelfeignLoggerLevel(){returnLogger.Level.FULL;}}7.2.Idea编译报错:Ambiguousmethodcall.Both...IDEASettings...>Plugins>搜索已安装的插件HriseyPlugins>禁用该插件
spring-cloud-starter-gateway依赖与mvc是不兼容的,如果要引用spring-boot-starter-web需要把mvc排除
华为开发者空间发布
让每位开发者拥有一台云主机
在此一键设置昵称,即可参与社区互动!
*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。