Spring Cloud 2020 版本最佳实践,你落伍了!
上一篇:再见!LayUI !
作者:低调小熊猫
来源:https://ilovey.live/2021/09/26/springcloud2020/
Spring Cloud 从H版本之后命名方式改为2020.x.x,话说为毛最新版本不是2021命名,来自强迫症的难受。
使用组件列表:
注册中心:nacos,替代方案eureka、consul、zookeeper
配置中心: nacos ,替代方案sc config、consul config
调用:feign,替代方案:resttempate
熔断:sentinel、,替代方案:Resilience4j
熔断监控:sentinel dashboard
负载均衡:sc loadbalancer
网关:spring cloud gateway
链路:spring cloud sleuth+zipkin,替代方案:skywalking等
总体架构图
版本关系
使用nacos作为注册中心和配置中心
下载nacos
下载地址:https://github.com/alibaba/nacos
导入数据库
创建mysql数据库nacos,导入 conf/nacos-mysql.sql
配置数据库
修改 conf/application.properties
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
配置启动模式
将nacos设为单机模式启动,编辑 bin/startup.cmd 将MODE 修改为:
set MODE="standalone"
启动运行
登陆页面:http://localhost:8848/nacos/,登陆用户nacos,登陆密码为nacos
工程案例
工程案例源码:https://github.com/java-aodeng/springcloud2020-demo-1
工程案例包括2个,一个服务提供者provider 、服务消费者consumer
在父pom文件引入相关的依赖,如下:
<properties><java.version>1.8</java.version><spring-boot.version>2.4.4</spring-boot.version><spring-cloud.version>2020.0.2</spring-cloud.version><spring-cloud-alibaba.version>2020.0.RC1</spring-cloud-alibaba.version>
</properties><dependencyManagement><dependencies><!-- spring boot 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring cloud 依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring cloud alibaba 依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
服务提供者provider
在pom文件引入以下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置文件:
server:port: 8762spring:application:name: providercloud:nacos:discovery:server-addr: 127.0.0.1:8848
启动入口添加注解:
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class,args);}
}
写个接口:
@RestController
public class DemoController {@Value("${server.port}")String port;@GetMapping("getInfo")public String getInfo(@RequestParam(value = "name",defaultValue = "nacosConfig",required = false)String name){return "my name is "+name+",my port is "+port;}
}
服务消费者consumer
在pom文件引入以下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency><!--引入openfeign,必须要引入loadbalancer,否则无法启动-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
配置文件
server:port: 8763spring:application:name: consumercloud:nacos:discovery:server-addr: 127.0.0.1:8848
在工程的启动入口开启FeignClient的功能
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class,args);}
}
写一个FeignClient,去调用provider服务的接口:
@FeignClient(value = "provider")
public interface ProviderClient {@GetMapping("getInfo")String getInfo(@RequestParam(value = "name",defaultValue = "nacosConfig",required = false)String name);
}
写一个接口,让consumer去调用provider服务的接口:
@RestController
public class DemoController {@AutowiredProviderClient providerClient;@GetMapping("getInfoByFeign")public String getInfoByFeign(){return providerClient.getInfo("consumer feign");}
}
启动两个工程,在nacos服务列表页面出现,consumer,provider2个服务表示都已经注册成功。
服务调用
在浏览器上输入http://localhost:8763/getInfoByFeign,浏览器返回响应
my name is consumer feign,my port is 8761
可见浏览器的请求成功调用了consumer服务的接口,consumer服务也成功地通过feign成功的调用了provider服务的接口。另外,Spring Cloud 系列面试题和答案全部整理好了,微信搜索互联网架构师,在后台发送:2T,可以在线阅读。
使用sc loadbanlancer作为负载均衡
使用spring cloud loadbanlancer作为负载均衡器。通过修改provider的端口,再在本地启动一个新的provider服务,那么本地有2个provider 服务,端口分别为8761 和8762。在浏览器上多次调用http://localhost:8763/getInfoByFeign,浏览器会交替显示:
my name is consumer feign,my port is 8761
my name is consumer feign,my port is 8762
注册中心provider服务也会显示两个示例。
使用nacos作为配置中心
父工程添加nacos配置版本,另一个是用来解决最新版本导致的问题:
<alibaba.nacos.version>2.0.3</alibaba.nacos.version>
<spring-cloud.bootstrap.version>3.0.4</spring-cloud.bootstrap.version><!--Alibaba Nacos 配置--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>${spring-cloud-alibaba.version}</version></dependency><!--引入这个依赖解决SpringCloud2020整合Nacos-Bootstrap配置不生效的问题--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>${spring-cloud.bootstrap.version}</version></dependency>
服务提供者provider添加依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
在bootstrap.yml(一定是bootstrap.yml文件,不是application.yml文件)文件配置以下内容:
server:port: 8762
spring:application:name: providercloud:nacos:config:enabled: trueserver-addr: 127.0.0.1:8848file-extension: ymlprefix: providerprofiles:active: dev
在上面的配置中,配置了nacos config server的地址,配置的扩展名是ymal(目前仅支持yml和properties)。注意是没有配置server.port的,sever.port的属性在nacos中配置。上面的配置是和Nacos中的dataId 的格式是对应的,nacos的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 {file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。启动nacos,登陆localhost:8848/nacos,创建一个data id ,完整的配置如图所示:
源码下载:
https://github.com/java-aodeng/springcloud2020-demo-1
参考资料:
https://www.fangzhipeng.com/spring-cloud.html
https://spring.io/projects/spring-cloud
https://www.springcloud.cc/
https://blog.csdn.net/llllllllll4er5ty/article/details/104425284
感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!小编到你上高速。
· END ·
最后,关注公众号互联网架构师,在后台回复:2T,可以获取我整理的 Java 系列面试题和答案,非常齐全。
正文结束
推荐阅读 ↓↓↓
1.不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事
2.如何才能成为优秀的架构师?
3.从零开始搭建创业公司后台技术栈
4.程序员一般可以从什么平台接私活?
5.37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...
6.IntelliJ IDEA 2019.3 首个最新访问版本发布,新特性抢先看
7.这封“领导痛批95后下属”的邮件,句句扎心!
8.15张图看懂瞎忙和高效的区别!
一个人学习、工作很迷茫?
点击「阅读原文」加入我们的小圈子!
Spring Cloud 2020 版本最佳实践,你落伍了!相关推荐
- Spring Cloud Config 配置中心实践过程中,你需要了解这些细节!
本文导读: Spring Cloud Config 基本概念 Spring Cloud Config 客户端加载流程 Spring Cloud Config 基于消息总线配置 Spring Cloud ...
- Spring cloud 2020 gateway nacos 出现503的情况
Spring cloud 2020 gateway nacos 出现503的情况 参考https://blog.csdn.net/weixin_39233623/article/details/121 ...
- 2020年Spring Cloud最后一个大版本发布!
2020年12月22日,Spring Cloud 2020.0 正式发布GA版本! 版本说明 每次Spring Cloud的大版本发布,我们都要先弄清楚,它对应的Spring Boot版本是哪个! 该 ...
- spring cloud 2020 改变了版本的命名规则
前言 一直对spring cloud 的版本命名规则很诟病,之前的spring cloud 版本名是根据伦敦地铁站名称的英文名称并按照字母a-z进行排序.虽然知道了规则感觉还行,但是这种对非英语语言环 ...
- spring cloud alibaba版本选择
https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 Spring Cloud Version Spring Cloud Version ...
- Spring Cloud Hystrix理解与实践(一):搭建简单监控集群
前言 在分布式架构中,所谓的断路器模式是指当某个服务发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,这样就不会使得线程因调用故障服务被长时间占用不释放,避免故障的继续蔓延.Spring ...
- Spring Cloud 2020.0.5 发布
来源 | 公众号「Java架构日记」 Spring Cloud 2020.0.5 正式发布,这是错误修正版本.兼容 Spring Boot 2.4.x and 2.5.x, 不支持 2.6.x (请使 ...
- Spring Cloud 2020.0.4 发布!
作者 | 冷冷 来源 | https://mp.weixin.qq.com/s/ugyP_6s8XJxLk_2L9e_8PA Spring Cloud 2020.0.4 正式发布,这是错误修正版本.兼 ...
- Spring Cloud 2020 年路线图:二季度Spring Boot 2.3、四季度Spring Cloud Ilford
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 局长 来源 | oschina.net/new ...
- Spring Cloud 2020.0.0 正式发布,对开发者来说意味着什么?
作者 | YourBatman 在线教育领域资深架构师,Spring Framework 开源贡献者 冷冷 云集架构师.开源项目 pig 负责人.Spring Cloud Alibaba Commit ...
最新文章
- HTTP面试题都在这里
- Gateway网关-快速入门
- NOT IN、JOIN、IS NULL、NOT EXISTS效率对比
- LeetCode 1312. 让字符串成为回文串的最少插入次数(区间DP)
- Python 几种可视化方法随笔
- 【kafka】kafka 时间轮 TimingWheel
- [leetcode]5366. 检查网格中是否存在有效路径
- PHP童鞋改JAVA代码怎么处理
- 485转4-20mA信号转换0-10v5v电压电流采集模块
- 51单片机LCD1602程序
- [Linux学习] 实战系列之网络管理
- golang中的reflect(反射)
- Mysql比较运算符实战
- |app自动化测试之Appium WebView 技术原理
- c程序怎样往mysql里面添加字符串指针指向的字符串
- 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架
- 趣图:沙雕用户的日常
- 有没有好人看看,谢谢谢谢
- WHM面板修改PHP版本教程
- 视觉与智能学习近期期刊阅读与相关知识学习
热门文章
- 【Flutter】基础组件【07】Appbar
- iOS WKWebView与JS交互传值
- BuzzFeed如何从Perl单体应用迁移到Go和Python微服务
- linux系统网络命令(六)
- Springmvc与jasperreport结合生成报表的一种方法
- poj 1389 Area of Simple Polygons 线段树扫面线,和1151一样的嘛
- Acrobat Pro DC 教程,如何拆分PDF文件?
- 如何在 iPhone、iPad 和 Mac 上更改日历颜色?
- iOS开发之tableHeaderView的那些坑
- iOS开发 Linker command fail with exit code 1(use -v to see invocation)