SpringCloud服务注册中心

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

前言

本文第一代SpringCloudNetflix和第二代SpringCloudAlibaba都有讲解。参考尚硅谷周阳老师的资料。

下面文章不定期更新中。。。

SpringCloud服务注册中心
SpringCloud服务调用
SpringCloud服务降级
SpringCloud服务网关
SpringCloud服务配置
SpringCloud服务总线
SpringCloud消息驱动
SpringCloud链路跟踪
SpringCloud分布式事务

一、概念

1、概念理论图

老版本组件
在这里插入图片描述
红框为升级后新的选型
在这里插入图片描述

2、版本选型

https://spring.io/projects/spring-cloud#overview
在这里插入图片描述
在这里插入图片描述
https://spring.io/projects/spring-cloud#learn 后面的是其他框架的具体版本
在这里插入图片描述
https://docs.spring.io/spring-cloud/docs/current/reference/html/
在这里插入图片描述
其他版本在同一页
在这里插入图片描述
更细粒度:
https://start.spring.io/actuator/info
在这里插入图片描述
在这里插入图片描述
版本组件选择说明:
看wiki里面的说明。https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

3、restTemplate

在这里插入图片描述
httpClient基础上封装了一次
在这里插入图片描述
并没有用微服务的组件
在这里插入图片描述
用了微服务组件,依据注册中心可以拿到一个一样的名字,然后默认是负载均衡-轮询的策略,来实现调用达到负载均衡(服务提供端要做集群)
在这里插入图片描述
前端截图去访问的话会报错,因为没有设置负载均衡(未设置代码)
在这里插入图片描述
要加一个注解来启动负载均衡。

备注:
SOA是面向服务的架构,系统的所有服务都注册在总线上,当调用服务时,从总线上查找信息,然后调用服务

其他一些概念:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
中文官网,注意版本号切换
https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/README-zh.md

4、全部四个注册中心

Eureka、Zookeeper、Consul、Nacos

二、服务注册中心Eureka

1、Eureka服务端

在这里插入图片描述
Eureka服务端pom的配置 (多余的jar包,比如durid多引入了,会报数据库相关错误,所以pom要简洁)
在这里插入图片描述
Eureka服务端的yml配置
在这里插入图片描述
Eureka服务端的启动类配置

2、Eureka客户端

在这里插入图片描述
Eureka客户端(任何微服务)的pom配置
在这里插入图片描述
Eureka客户端(任何微服务)的yml配置
在这里插入图片描述
Eureka客户端(任何微服务)的启动类配置

3、Eureka访问

访问地址
在这里插入图片描述
原理
在这里插入图片描述
Eureka的自我保护机制 CAP中的AP
在这里插入图片描述

4、说明

Eureka已经停止更新,原来是Netflix公司的,建议使用阿里巴巴公司的Nacos。
注册中心除了提供注册发现服务外,注册的客户端微服务的application.name还能被当做url地址来访问(只限制与微服务和微服务的调用,直接 http浏览器访问是不行的)。
例如 order微服务注册到Eureka里面的肯定是大写ORDER服务名称(当application.yml配置name为order时),那么http://ORDER就是这个微服务的URI,加一些资源路径,在浏览器是不能访问的,比如http://ORDER/order/get/1,这种在浏览器访问不行(毕竟是公网,要ip地址和端口号, 浏览器地址是 http://localhost:80/order/get/1),但是在微服务和微服务直接调用完全可以,用restTemplate模板的时候。

三、服务注册中心Zookeeper

1、安装

https://blog.csdn.net/ring300/article/details/80446918

在这里插入图片描述
jar包冲突解决(记录一次,我弄的时候都是最新项目,没有冲突)
在这里插入图片描述
安装后类似tomcat或者redis那样在window启动一下,看网站有说明,要改配置文件,不然启动会报错

2、服务提供者修改配置

payment8004改pom
在这里插入图片描述
引入注册中心
在这里插入图片描述

3、消费者修改配置

orderZk80改pom
在这里插入图片描述
引入注册中心
在这里插入图片描述
直接通过注册中心提供的地址去调用了消费者payment8004的接口
在这里插入图片描述
在Linux中可以通过命令查看,就是yml配置中的application.name
在这里插入图片描述

4、说明

zookeeper是java开发的,并且在Linux系统下可以用命令查看到引入到注册中心的服务,比如上面截图中的payment8004,它没有像Eureka一样的浏览器界面让我们直观的看(听说现在可以配置了,但是很不好用?)。
Eureka在客户端断开后,会进入自我保护机制,长达90秒(默认设置),在超过90秒后才删除服务。而Zookeeper则只有2000毫秒(默认设置),客户端断开后(客户端挂机或者客户端网络问题等等),2000毫秒就删除服务了,基本可以认为是及时删除,客户端只是Zookeeper的临时节点。
和Eureka不同的还有,注册后的服务地址就是小写,同样的直接到浏览器肯定是不能用这个服务地址的,但是服务和服务直接调用完成可以,而且和application.name设置的名字一模一样,没有像Eureka那样全部变大写。

四、服务注册中心Consul

1、安装

官网直接下载解压后,就是一个consul.exe可执行程序。非常方便。
consul agent -dev命令启动,在cmd框中。当然也可以直接双击运行。
访问地址:http://localhost:8500
在这里插入图片描述
安装目录下面的cmd框运行这个命令
在这里插入图片描述
cmd启动框

2、服务提供者修改配置

payment8006改pom配置

在这里插入图片描述
改yml配置 引入注册中心(把localhost改成本地ip地址不行,可能有什么原因,暂时不知道)
在这里插入图片描述

3、消费者修改配置

orderConsul80改pom配置
在这里插入图片描述
改yml配置 引入注册中心
在这里插入图片描述
微服务发现地址
在这里插入图片描述

4、说明

HashiCrop公司用Go语言写的。分布式服务发现和配置管理系统。提供了完整的服务网格解决方案。有自己的可视化界面。说是Zookeeper配置完也有,但是支撑不太好。除去Zookeeper,其他三个注册中心都有自己的可视化界面。
和Zookeeper非常相似,类似redis或者tomcat的window版本启动,注册后微服务能够互相调用的地址也是小写,同样的浏览器不能直接访问这个服务地址,和application.name名字一模一样,并且由于和Zk都是CAP中的CP,保证强一致性的,微服务挂掉后,很快就会删除微服务,类似ZK。,而Eureka是AP,不会马上删除微服务。Consul有自己非常漂亮的可视化界面。

5、上面三个注册中心对比

对比
在这里插入图片描述
在这里插入图片描述

6、CAP经典简单举例

P肯定会有,现在不是CP就是AP,P就是有问题的时候,不会因为一个节点挂了影响整体,很分布式很微服务,所以肯定会满足。而A和C是互斥的,A是可用C是强一致,举个例子:点赞数,在一定情况下,是允许点赞数不是那么实时,统计出来不是那么准确的,这种情况下就是保证了点赞数这个功能的可用性,由于这样,统计不准确,数据肯定不准确,数据就不是强一致性,就不满足C了。所以点赞数一般都是AP,能用就行了。有些,比如订单这种,数据必须准确,一般都是CP。
在这里插入图片描述
CP这种情况下,为了数据一致性,B服务直接返回错误码了。而AP情况下,B服务能正常返回。

五、服务注册中心Nacos

1、概念

Nacos=Eureka+Config+Bus

1.1、下载

在这里插入图片描述
https://github.com/alibaba/nacos 这个网站 点nacos.io过去就是官网
在这里插入图片描述
点开源版会回到前面截图
在这里插入图片描述
这边版本下载

1.2、安装运行

直接解压,出来一个nacos文件夹
在这里插入图片描述
bin下cmd运行命令 startup.cmd -m standalone 因为默认是集群模式了,这边要指明单机模式启动 linux对应为 sh startup.sh -m standalone
在这里插入图片描述
http://localhost:8848/nacos 浏览器访问 账号密码 默认都是 nacos
在这里插入图片描述

1.3、访问

在这里插入图片描述
为了版本一致性,降低到1.4.2了
在这里插入图片描述

2、注册中心

2.1、服务提供者配置

注意:总pom的版本一定要按照官网上要求的来,不然各种坑,各种报错。一定要版本保持一致。
在这里插入图片描述
改pom
在这里插入图片描述
改yml
在这里插入图片描述
改启动类
在这里插入图片描述
业务类 (payment9001 和 payment9002类似,启动集群)
在这里插入图片描述
测试成功
在这里插入图片描述

2.2、消费者配置

改pom
在这里插入图片描述
改yml
在这里插入图片描述
改启动类
在这里插入图片描述
业务类
在这里插入图片描述
restTemplate的坑
在这里插入图片描述
消费者要单独引入,不然报 payment这个url是未知host地址
在这里插入图片描述
报错原因猜测就是 新版并没有看到包含ribbon了。
在这里插入图片描述
测试结果,请求轮询 9001 9002
在这里插入图片描述

2.3、坑

版本一定要匹配,项目中我用错了Alibaba的版本,用的2.2.7导致,服务提供者一直无法注册进去
在这里插入图片描述
为了保证版本一直,将nacos下载安装的降低到1.4.2版本了。下载一个tar.gz包就行了,在三个操作系统window(同上安装)、mac、Linux(官网命令)都能用。
在这里插入图片描述

3、配置中心

3.1、概念

两个配置,bootstrap和application
在这里插入图片描述
官网理论
在这里插入图片描述
视频的配置案例说明(注意深坑,nacos那边配置时, .yml不行呀,要.yaml才行)
在这里插入图片描述
视频的配置(注意深坑,.yml不行呀,要.yaml才行)
在这里插入图片描述
视频的配置(注意深坑,.yml不行呀,要.yaml才行)(这里截图是对的,data ID 要有.yaml的后缀结尾。注意!注意!注意!)
在这里插入图片描述
小总结
在这里插入图片描述

3.2、客户端配置(nacos本身就是服务端)

改pom
在这里插入图片描述
改yml(红框的字,不知道后面有没有优化)(坑:注意yaml的格式,不能被其他配置插入影响了)
在这里插入图片描述
改yml
在这里插入图片描述

改启动类(这个上面加个@RefreshScope,全局影响)
在这里插入图片描述
业务类(这个@RefreshScope可以放在启动类,全局影响)
在这里插入图片描述
nacos配置文件。这个具体可以看上面的概念截图。坑多,配置要非常仔细。(不用像config那样搞github,非常方便)
在这里插入图片描述
测试结果。成功
在这里插入图片描述

3.3、坑

客户端启动错误,坑1,但是还是不行啊,看后面截图
在这里插入图片描述

https://blog.csdn.net/wyz0923/article/details/118303072

网速源码解析
在这里插入图片描述
在application.yml加上name配置就可以了,在bootstrap加上就不行。原因就在于改了规则,得引入bootstrap的依赖
在这里插入图片描述
坑2
在这里插入图片描述
深坑
在这里插入图片描述
深坑,还是报错,因为ymal写错了,正确的是 yaml
在这里插入图片描述
这才是正确的
在这里插入图片描述

3.4、动态刷新

Controller上面加个@RefreshScope注解。
支持nacos的动态刷新,不是被动的,是真正的,不像config那样还得主动post请求什么的,或者结合mq还是要请求。这个主动刷新了,nacos那边的配置一改,马上生效,不用人工去post,不用重启任何微服务,不用重启nacos,真棒!!!。

在这里插入图片描述
真正的动态刷新。秒杀config+bus,帅的一批

3.5、分类配置概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、集群和持久化

4.1、概念

在这里插入图片描述
在这里插入图片描述
持久化说明:
不能用自带的内嵌数据库derby,当要弄nacos集群的时候,每个都在自己带的数据库里面存,数据有一致性问题,所以要 集中用MySQL数据库

4.2、数据库操作(同理移植到Linux系统)

在自己MySQL数据库创建数据库

在这里插入图片描述
改application文件

在这里插入图片描述
视频的修改截图

在这里插入图片描述
我自己修改的截图,注意数据库名称 和用户名和密码修改成自己MySQL数据库的,改错了又是深坑。而且url参考了这个配置文件的(比官网东西多)
在这里插入图片描述重启后发现之前的dev和test等都不见了,说明对了,之前是存到内嵌数据库的,现在链接到了MySQL数据库了。
在这里插入图片描述

4.3、nacos的修改

改conf下面文件
在这里插入图片描述
改conf下面文件(注意,这边一定要在Linux系统查看hostname -i 看到的ip地址,不能是localhost和127)
在这里插入图片描述
养成好习惯,先备份原来的配置文件 .bk结尾
在这里插入图片描述
视频截图,这个我下的版本已经有了,不用搞这个
在这里插入图片描述
视频截图,这个我下的版本由于前面截图已经有了,后面不用跟着搞了,实测可以
在这里插入图片描述

启动命令:
sh startup.sh -p 3333(在bin目录下./startup.sh -p 3333这个居然不行)
sh startup.sh -p 4444
sh startup.sh -p 5555

ps -ef | grep nacos| grep -v grep|wc -l   命令检查几个启动了,是3才对

在这里插入图片描述

4.4、nginx的修改

视频截图
在这里插入图片描述
我自己的截图
在这里插入图片描述
开启端口*(注意把8848也加上去)
在这里插入图片描述

启动命令:
nohup /usr/local/nginx/sbin/nginx &

4.5、坑

在吉帆Linux启动nacos集群的时候,发现linux内存不够用,改shartup.sh把,值改小,依次为 64 64 40,生产环境一般不用改。还是不够用,Linux环境测试放弃
在这里插入图片描述

4.6、日志的坑

默认按照上面的配置启动后,会有大量日志产生。所以后面要关闭一下配置再去启动。
在这里插入图片描述
vim /usr/local/nacos/conf/application.properties
在这里插入图片描述

4.7、小总结

1、集群和持久化,都在Linux系统环境中弄;
2、首先Linux中的MySQL数据库要安装弄好,并且创建数据库nacos_config,然后nacos安装路径下面的application.properties文件要增加db连接等内容连接到Linux系统上的MySQL数据库;
3、其次Linux中的nacos安装好后,在conf文件下创建新文件cluster.conf文件,里面加上3个或3个以上的ip地址和端口;视频改了shutup.sh的启动文件,但是新版本不用改了。并且window环境下需要三份nacos文件,而linux环境下不需要,启动的时候带参数就能抽像成三份。
4、再次Linux中的Nginx要修改nginx.config文件,增加3个ip地址的负载均衡和反向代理。(Nginx本身没有做集群) nohup /usr/local/nginx/sbin/nginx & 启动。

5、上面四个注册中心对比

对比(这里面nacos显示了支撑ap,其实cp也支撑,可以切换),nacos全场景覆盖,相当牛批
在这里插入图片描述
在这里插入图片描述
下面命令就是切换cp模式
在这里插入图片描述

六、综合案例:Alibaba组件整合

1、服务提供者

在这里插入图片描述
在这里插入图片描述

2、服务消费者

在这里插入图片描述

在这里插入图片描述

3、nacos配置

在这里插入图片描述

4、gateway网关

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝影铁哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值