Nacos注册中心和服务发现

Nacos注册中心

Nacos注册中心和服务发现_第1张图片

01 认识和安装Nacos

Nacos比Eureka功能更为丰富,是SpringCloud中的一个组件,Nacos是阿里巴巴的产品,在国内更流行。

NACOS功能:服务发现(对标Eureka)、配置管理、服务管理

下载见:D:\zwx\weifuwu\nacos-server-1.4.1或者在官网

GitHub主页:https://github.com/alibaba/nacos

GitHub的Release下载页:https://github.com/alibaba/nacos/releases

在nacos文件bin页面中cmd打开终端

Nacos注册中心和服务发现_第2张图片

输入启动语句:startup.cmd -m standalone -m表示模式 standalone表示单机启动

Nacos注册中心和服务发现_第3张图片

在浏览器输入上图中Console地址 http://10.0.4.94:8848/nacos/index.html 进行登录,初始账号密码均为nacos

Nacos注册中心和服务发现_第4张图片

登录成功显示如下

Nacos注册中心和服务发现_第5张图片

02 Nacos快速入门

服务注册到 Nacos

1.在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖:

    
	com.alibaba.cloud    
	spring-cloud-alibaba-dependencies    
	2.2.5.RELEASE    
	pom    
	import

2.注释掉order-service和user-service中pom文件和yml文件中原有的eureka依赖和配置

3.在order-service和user-service的pom中添加nacos的客户端依赖


    
	com.alibaba.cloud    
	spring-cloud-starter-alibaba-nacos-discovery

4.修改user-service&order-service中的application.yml文件,注释eureka地址,添加nacos地址:

Nacos注册中心和服务发现_第6张图片

5.启动并测试

Nacos注册中心和服务发现_第7张图片

Nacos注册中心和服务发现_第8张图片

03 Nacos服务分级存储模型

服务—>集群—>实例

Nacos注册中心和服务发现_第9张图片

为什么要多加一个集群,地域划分

Nacos注册中心和服务发现_第10张图片

没有配置集群之前,集群是DEFAULT

Nacos注册中心和服务发现_第11张图片

配置服务集群

Nacos注册中心和服务发现_第12张图片

Nacos注册中心和服务发现_第13张图片

Nacos注册中心和服务发现_第14张图片

小结

Nacos注册中心和服务发现_第15张图片

04 NacosRule负载均衡

目的:要实现Orderservice远程调用userservice时,优先选择本地集群

先配置orderservice yml中集群

Nacos注册中心和服务发现_第16张图片

得到结果如下Nacos注册中心和服务发现_第17张图片

进入浏览器页面访问http://localhost:8080/order/101~6

但8081 8081 8082每个进行了两次sql查询,轮询的负载均衡方式,并没有采用优先同集群

Nacos注册中心和服务发现_第18张图片

需要在order-service的yml中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务,在本地集群中随机选择实例

userservice: 
	ribbon:  
		NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 

之后进入浏览器页面访问http://localhost:8080/order/101~6 结果如下

Nacos注册中心和服务发现_第19张图片

8082也是HZ集群Nacos注册中心和服务发现_第20张图片

Nacos注册中心和服务发现_第21张图片

如果将8081,8082都关掉

Nacos注册中心和服务发现_第22张图片

再进入浏览器页面访问http://localhost:8080/order/101~3 结果如下

也就是说NacosRule如果没有本地集群,也是会去找别的集群的

Nacos注册中心和服务发现_第23张图片

但是在orderservice中会出现WARN

01-22 10:52:35:208 WARN 13980 — [nio-8080-exec-1] c.alibaba.cloud.nacos.ribbon.NacosRule : A cross-cluster call occurs,name = userservice, clusterName = HZ, instance = [Instance{instanceId=‘10.0.4.94#8083#SH#DEFAULT_GROUP@@userservice’, ip=‘10.0.4.94’, port=8083, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName=‘SH’, serviceName=‘DEFAULT_GROUP@@userservice’, metadata={preserved.register.source=SPRING_CLOUD}}]

解释:一个跨集群访问发生了,你想访问的是HZ集群,但访问到的确定SH集群

Nacos注册中心和服务发现_第24张图片

05 根据权重负载均衡

com.alibaba.cloud.nacos.ribbon.NacosRule 在集群中是随机。而同一集群中有些设备性能好,有些设备性能差,我们希望让性能好的机器承担更多的请求,因此需要根据权重负载均衡。

权重设置方式如下图(权重值 0~1)

Nacos注册中心和服务发现_第25张图片

将8081端口权重调到0.1

Nacos注册中心和服务发现_第26张图片

进入浏览器页面访问http://localhost:8080/order/101~6。对比同一集群 8081、8082中反应的情况

六次服务中有五次访问到8082,只有1次访问到8081。差不多就是这个样子!

Nacos注册中心和服务发现_第27张图片

Nacos注册中心和服务发现_第28张图片

若把8081权重从0.1调成0,则无论访问多少次,8081都不会被访问。

但权重0可用于版本升级。比如将8081权重调成0,再对8081停机做版本升级,升级完成后,再把8081权重调小点 放少数用户进来做测试看看行不行 若没什么问题则可扩大权重。(平滑升级,用户没有感知)

小结

Nacos注册中心和服务发现_第29张图片

06 Nacos环境隔离

环境隔离 - namespace 命名空间

Nacos注册中心和服务发现_第30张图片

namespace使用演示

Nacos注册中心和服务发现_第31张图片

Nacos注册中心和服务发现_第32张图片

在服务列表中也体现了命名空间如下图

Nacos注册中心和服务发现_第33张图片

Nacos注册中心和服务发现_第34张图片

怎么去修改一个服务的命名空间呢?比如我想修改一个服务的命名空间为dev

答:在yml中添加namespace

例如:修改order-service的application.yml,添加namespace

Nacos注册中心和服务发现_第35张图片

然后重启orderservice,打开nacos管理页面,可以看到orderservice出现在命名空间dev中

Nacos注册中心和服务发现_第36张图片

此时访问http://localhost:8080/order/101 失效, 因orderservice与userservice不在同一命名空间,无法从userservice中获取用户信息而导致访问

Nacos注册中心和服务发现_第37张图片

代码报错如下

01-22 14:12:08:226 ERROR 25516 — [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No instances available for userservice] with root cause

Nacos注册中心和服务发现_第38张图片

小结

Nacos注册中心和服务发现_第39张图片

你可能感兴趣的:(服务发现,中间件,spring,cloud,java,云原生,微服务,spring,boot)