技术交流SpringCloud项目接入华为云微服务引擎CSE(二)云社区

微服务包含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

com.huaweicloudspring-cloud-starter-huawei-service-engine删除netflix-hystrix

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包

org.springframework.bootspring-boot-starter-weborg.springframeworkspring-webmvc删除eureka-client包

引入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排除

org.springframework.bootspring-boot-starter-weborg.springframeworkspring-webmvc7.4.OpenFeign调用报错com.netflix.client.ClientException:Loadbalancerdoesnothaveavailableserverforclient:DTSE-OBS-STORAGEyml文件里面的服务名,要和@FeignClient(value="xxx")里面的xxx一样,切记别弄错,大小写也要一致

华为开发者空间发布

让每位开发者拥有一台云主机

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

THE END
1.java毕业生选题mob649e81693c66的技术博客作为一名刚刚毕业的Java开发者,选择一个合适的项目作为自己的毕业设计是至关重要的。一个好的项目不仅可以展示你的编程能力,还可以帮助你掌握软件开发的全局视角,以及解决实际问题的能力。本文将为你推荐几个Java项目选题,并提供一些代码示例,帮助你更好地理解这些项目的实现方式。 https://blog.51cto.com/u_16175519/12873972
2.腾讯云开发者社区腾讯技术创作特训营S10go后端 你维护的 Go 项目代码架构是什么样子的?六边形架构?还是洋葱架构?亦或者是 DDD?无论项目采用的是什么架构,核心目标都应是一致的:使代码能够易于理解、测试和维护。 陈明勇 2024-12-06 1583 OpenAI的o1大模型满血版终于发布,其效果如何? 腾讯技术创作特训营S10 推荐文章:https://clohttps://cloud.tencent.com/developer/article/
3.2024年面向初学者的25大Java项目创意2024java项目Java是IT行业的领先编程语言,几乎所有类型的软件开发都使用Java。从手机到大型机,Java无处不在。 如果您是初学者或有软件开发抱负的人,我们强烈建议您开始从事实时和成熟的实时Java项目。 这篇“Java项目”文章完全基于相同的计划,即帮助其他开发人员提供实时Java项目的想法,这将帮助您更接近您的梦想角色。 https://blog.csdn.net/m0_37567008/article/details/136024183
4.2024年10个最佳Java源码项目以下是2024年建议学习的Java中后端应用、安卓应用等10个最佳项目: 1. 用户管理应用 该用户管理项目集成了基于电子邮件的用户注册和密码重置,以确保用户的安全性和完整性,使用JWT 身份验证进行安全登录。该项目将包括基于角色的授权,我们还可以使用记录器来打印此类信息消息。 https://www.jdon.com/71418.html
5.码云周刊第49期Java微服务从源码实战开始微服务能够使我们的开发效率更高,沟通成本更低,响应速度更快,迭代周期更短。当然,每一种技术都不可能完美无缺,微服务也有自身的短板。但是,我们依然可以从微服务的理念和技术中学到很多东西,希望大家能够喜欢这一期的 Java 微服务项目。 如果大家有好的微服务开源项目,也可以托管到码云上,我们会及时给予推荐。最后,如果https://my.oschina.net/gitosc/blog/1581773
6.2024最强云原生微服务治理框架2024最强云原生微服务治理框架,全flowsphere开源项目 flowsphere是基于bytebuddy字节码增强技术进行建设,采用插件化方式进行整体架构设计, 利用字节码增强技术为微服务提供全链路流量治理能力。全方位扩展SpringCloud&SpringCloudAlibaba, 扩展Java生态提供高性能,低资源损耗,降本增效的流量治理框架。 https://juejin.cn/post/7410097732185817103
7.2024github开源项目排名十个github热门开源项目推荐GitHub作为全球最大的代码托管平台,汇聚了无数开发者的智慧结晶。开源项目不仅推动了技术的进步,也为开发者提供了学习和交流的平台。2024年,随着技术的不断发展,GitHub上的开源项目也呈现出新的趋势和热点。本文将为您推荐十个热门的开源项目,以及几个有趣和优秀的Java开源项目,希望能为您的开发之路提供助力。 https://www.bnocode.com/article/github-open-source-project.html
8.黑马程序员2024最新SpringCloud微服务开发与实战个人学习心得2024最新SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等) Day 2 你好,我是Qiuner.为记录自己编程学习过程和帮助别人少走弯路而写博客这是我的 github https://github.com/Qiuner ?giteehttps://gitee.com/Qiuner 如果本篇文章帮到了你https://cloud.tencent.com.cn/developer/article/2437501
9.黑马程序员2024最新SpringCloud微服务开发与实战个人学习心得2024最新SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等)Day 3 win 11 VMware workstations b不可恢复的错误(vcpu-2) image-20240616085118733 找一个新版的VM进行下载这个问题就能解决,博主之前是16pro http://cloud.ceden.cn/?developer/article/2437584
10.>代码生成前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发! JeecgBoot 引领新的低代码开发模式(OnlineCoding-> 代码生成器-> 手工MERGE), 帮助解决Java项目70%的重复工作,让开发更多关注业务。既能快速提高效率,节省研发https://toscode.mulanos.cn/whicker/jeecg-boot
11.Java项目库更多推荐 置顶毕设项目SpringBoot项目 锋迷商城 SpringCloud微服务架构电商综合项目。 #Java#Spring#SpringMVC#MyBatis#SpringCloud#Rabbitmq#Redis#Vue#JQuery#ElementUI#HTML5#CSS32023-05-06 置顶教学项目SpringBoot项目数字孪生物联网项目微服务项目 智慧大棚数字孪生系统 http://javaeeproject.com/
12.GitHub项目采用Gradle构建,基于Java 8/11/13、SpringBoot 2.2.6.RELEASE、SpringCloud Hoxton.SR2、Spring Cloud Alibaba 2.2.0.RELEASE、MyBatis Plus 3.3.1等核心技术体系实现的一套支持云原生的分布式微服务架构,提供OAuth2/JWT权限认证、分布式事务、灰度、限流、熔断降级、分布式锁、链路追踪、MQ等功能,支持Docker容器化https://github.com/micyo202/lion
13.黑马程序员2024最新SpringCloud微服务开发与实战个人学习心得2024最新SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等) Day 2 你好,我是Qiuner.为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的githubhttps://github.com/Qiuner giteehttps://gitee.com/Qiuner https://developer.aliyun.com/article/1548622
14.3.4SpringCloud2024&AlibabaSASOAuth2的微服务由于spring-javaformat强制所有代码按照指定格式排版,未按此要求提交的代码将不能通过合并(打包) 如果使用 IntelliJ IDEA 开发,请安装自动格式化软件spring-javaformat-intellij-idea-plugin 说明,或提交代码前在项目根目录运行下列命令(需要开发者电脑支持mvn命令)进行代码格式化 https://gitee.com/log4j/pig
15.大数据培训班北大青鸟大数据培训熟练掌握java、js、Jquery等语言。擅长Sturts2、Hibernate,Spring、MyBatis、SpringMVC、SpringSecurity、SpringBoot等J2EE框架技术。熟悉EasyUI、Bootstrap、Ext、Layui、等前端框架。熟练掌握linux、windows 等操作环境部署。熟练掌握docker容器,了解微服务架构。熟练掌握Maven项目构建,svn、git版本管理。熟练掌握python语言。https://www.qinxue365.com/course/589356.html
16.浅谈SpringBoot微服务项目的推荐部署方式java这篇文章主要介绍了浅谈Spring Boot 微服务项目的推荐部署方式,具有一定参考价值,需要的朋友可以了解下。如果开发过spring boot的程序,应该都知道,使用spring boot官方的maven打包插件(spring-boot-maven-plugin) 来打包,打出来的jar包一般有40M以上.如果公司的服务器上传带宽不高,那么手动上传一个jar或者jenkins部署一次https://www.jb51.net/article/124457.htm