上一篇:再见!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 版本最佳实践,你落伍了!相关推荐

  1. Spring Cloud Config 配置中心实践过程中,你需要了解这些细节!

    本文导读: Spring Cloud Config 基本概念 Spring Cloud Config 客户端加载流程 Spring Cloud Config 基于消息总线配置 Spring Cloud ...

  2. Spring cloud 2020 gateway nacos 出现503的情况

    Spring cloud 2020 gateway nacos 出现503的情况 参考https://blog.csdn.net/weixin_39233623/article/details/121 ...

  3. 2020年Spring Cloud最后一个大版本发布!

    2020年12月22日,Spring Cloud 2020.0 正式发布GA版本! 版本说明 每次Spring Cloud的大版本发布,我们都要先弄清楚,它对应的Spring Boot版本是哪个! 该 ...

  4. spring cloud 2020 改变了版本的命名规则

    前言 一直对spring cloud 的版本命名规则很诟病,之前的spring cloud 版本名是根据伦敦地铁站名称的英文名称并按照字母a-z进行排序.虽然知道了规则感觉还行,但是这种对非英语语言环 ...

  5. spring cloud alibaba版本选择

    https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 Spring Cloud Version Spring Cloud Version ...

  6. Spring Cloud Hystrix理解与实践(一):搭建简单监控集群

    前言 在分布式架构中,所谓的断路器模式是指当某个服务发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,这样就不会使得线程因调用故障服务被长时间占用不释放,避免故障的继续蔓延.Spring ...

  7. Spring Cloud 2020.0.5 发布

    来源 | 公众号「Java架构日记」 Spring Cloud 2020.0.5 正式发布,这是错误修正版本.兼容 Spring Boot 2.4.x and 2.5.x, 不支持 2.6.x (请使 ...

  8. Spring Cloud 2020.0.4 发布!

    作者 | 冷冷 来源 | https://mp.weixin.qq.com/s/ugyP_6s8XJxLk_2L9e_8PA Spring Cloud 2020.0.4 正式发布,这是错误修正版本.兼 ...

  9. Spring Cloud 2020 年路线图:二季度Spring Boot 2.3、四季度Spring Cloud Ilford

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 局长 来源 | oschina.net/new ...

  10. Spring Cloud 2020.0.0 正式发布,对开发者来说意味着什么?

    作者 | YourBatman 在线教育领域资深架构师,Spring Framework 开源贡献者 冷冷 云集架构师.开源项目 pig 负责人.Spring Cloud Alibaba Commit ...

最新文章

  1. HTTP面试题都在这里
  2. Gateway网关-快速入门
  3. NOT IN、JOIN、IS NULL、NOT EXISTS效率对比
  4. LeetCode 1312. 让字符串成为回文串的最少插入次数(区间DP)
  5. Python 几种可视化方法随笔
  6. 【kafka】kafka 时间轮 TimingWheel
  7. [leetcode]5366. 检查网格中是否存在有效路径
  8. PHP童鞋改JAVA代码怎么处理
  9. 485转4-20mA信号转换0-10v5v电压电流采集模块
  10. 51单片机LCD1602程序
  11. [Linux学习] 实战系列之网络管理
  12. golang中的reflect(反射)
  13. Mysql比较运算符实战
  14. |app自动化测试之Appium WebView 技术原理
  15. c程序怎样往mysql里面添加字符串指针指向的字符串
  16. 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架
  17. 趣图:沙雕用户的日常
  18. 有没有好人看看,谢谢谢谢
  19. WHM面板修改PHP版本教程
  20. 视觉与智能学习近期期刊阅读与相关知识学习

热门文章

  1. 【Flutter】基础组件【07】Appbar
  2. iOS WKWebView与JS交互传值
  3. BuzzFeed如何从Perl单体应用迁移到Go和Python微服务
  4. linux系统网络命令(六)
  5. Springmvc与jasperreport结合生成报表的一种方法
  6. poj 1389 Area of Simple Polygons 线段树扫面线,和1151一样的嘛
  7. Acrobat Pro DC 教程,如何拆分PDF文件?
  8. 如何在 iPhone、iPad 和 Mac 上更改日历颜色?
  9. iOS开发之tableHeaderView的那些坑
  10. iOS开发 Linker command fail with exit code 1(use -v to see invocation)