SpringCloud(五)【Nacos】

SpringCloud(一)微服务介绍
SpringCloud(二)【单体服务及远程调用】
SpringCloud(三)【Eureka注册中心】
SpringCloud(四)【Ribbon】



一、Nacos的Windows安装

(一)安装包下载

(二) Ncos官网
Nacos官网
(三)windows中nacos的安装和搭建

  1. 打开Nacos官网,点击“进入gitHub下载”,选择相应的版本进行下载。此处使用1.4.1
  2. 解压
    注意需要是英文路径
    在这里插入图片描述
  3. 配置端口
    默认端口是8848,如果已经被占用,则可以进行更改在这里插入图片描述
    进入application.properties进行端口更改
    在这里插入图片描述
  4. 启动
  • ① win+R进入命令行,cd到bin对应的路径
    在这里插入图片描述
  • ② 执行命令

单机模式

startup.cmd -m standalone

在这里插入图片描述
5. 打开控制台
右上交红框部分的console对应的为网址。

默认账号:nacos
默认密码:nacos
在这里插入图片描述
在这里插入图片描述

二、使用nacos实现负载均衡和服务的发现与注册

  1. SpringCloud父工程
    更改父工程的pom.xml
    在这里插入图片描述

    <!-- nacos的管理依赖-->
    <dependency>
    	<groupId>com.alibaba.cloud</groupId>
    	<artifactId>spring-cloud-alibaba-dependencies</artifactId>
    	<version>2.2.5.RELEASE</version>
    	<type>pom</type>
    	<scope>import</scope>
    </dependency>
    
  2. 服务的改造

  • 引入依赖

注意:Eureka和nacos不能同时使用

在这里插入图片描述

<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 修改yml文件

注意:Eureka和nacos不能同时使用

在这里插入图片描述
3. 启动服务
启动服务,可以看到服务实例信息。
在这里插入图片描述

三、服务多级存储模型

在这里插入图片描述
服务调用尽量调本地的服务实例,减少跨集群的调用可以减少延迟;当本地的服务不可调用时,才去调用别的集群的服务。

  1. 配置服务集群属性
    对userService服务进行配置,其中8081和8082在HZ集群,8083在SH集群。
spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址
      discovery:
        cluster-name: SH #可自定义-上海  
  1. 查看配置结果
    在这里插入图片描述

四、NacosRule负载均衡

配置完集群之后,希望优先选择本地集群,再进行跨集群访问。
总体规则

  1. 优先选择同集群服务实例列表;
  2. 本地集群找不到提供者,才去其它集群寻找,并且会报警告;
  3. 确定了可用实例列表后,再采用随机负载均衡挑选实例。

首先需要配置orderService的集群,然后需要配置它的负载均衡规则:
在这里插入图片描述

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

当在本地集群找不到提供者,再去进行跨集群访问,还会发出警告:

11-27 15:26:56:042 WARN 16276 — [nio-8080-exec-3] c.alibaba.cloud.nacos.ribbon.NacosRule : A cross-cluster call occurs,name = userservice, clusterName = HZ, instance = [Instance{instanceId=‘192.168.21.1#8083#SH#DEFAULT_GROUP@@userservice’, ip=‘192.168.21.1’, port=8083, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName=‘SH’, serviceName=‘DEFAULT_GROUP@@userservice’, metadata={preserved.register.source=SPRING_CLOUD}}]

在这里插入图片描述

五、根据权重负载均衡

可以根据机器设备的性能等参数对不同服务器配置不同的权重,再根据权重进行负载均衡。
总体规则

  1. Nacos控制台可以设置实例的权重值,0~1之间同集群内的多个实例;
  2. 权重越高被访问的频率越高;
  3. 权重设置为0则完全不会被访问。
    设置权重步骤:
    在这里插入图片描述
    在这里插入图片描述

特殊应用场景
如果将一个服务实例的权重调整为0,则不会访问该实例,此时可以对服务进行“平滑升级”。

六、环境隔离

Nacos可以进行服务存储和数据存储,而这两者的最外层都有一个叫做namespace的东西用来做外层隔离。
在这里插入图片描述
总体规则

  1. 每个namespace都有唯—id;
  2. 服务设置namespace时要写id而不是名称不同namespace下的服务互相不可见。

如果要要配置不同的环境(开发环境 / 测试环境 / 生产环境)如何实现?
4. 在nacos控制台新建namespace
在这里插入图片描述
在这里插入图片描述

  1. 在orderService的配置文件中配置namespace信息
    在这里插入图片描述
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: b47b494b-da3e-4cb8-b348-78213cfe0e77 #配置namespace
  1. 配置结果
    userService在public下,而orderService在dev下。
    在这里插入图片描述
    在这里插入图片描述
    4.如果此时进行访问,发现namespacedev下没有userService实例,会报错。

11-27 16:10:28:608 ERROR 13272 — [nio-8080-exec-1] 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

在这里插入图片描述

七、Eureka和Nacos的异同

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

  1. 临时实例和非临时实例的区别?
    临时实例宕机时,会从nacos的服务列表中剔除;
    非临时实例宕机时,不会从nacos的服务列表中剔除。

  2. 如何配置临时实例和非临时实例?
    默认是临时实例,ephemeral为true表示:是临时实例。

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ #集群名称
        namespace: b47b494b-da3e-4cb8-b348-78213cfe0e77 #配置namespace
        ephemeral: false #是否是临时实例
  1. Nacos与eureka的异同?

    Nacos与eureka的共同点:

    • 都支持服务注册和服务拉取;
    • 都支持服务提供者心跳方式做健康检测。

    Nacos与Eureka的区别:

    • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式;
    • 非临时实例采用主动检测模式临时实例心跳不正常会被剔除,非临时实例则不会被剔除;
    • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时;
    • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式,Eureka采用AP方式。

八、Nacos配置管理

(一)统一配置管理

SpringCloud中SpringCloudConfig、Nacos可以用作配置管理(同时Nacos还是注册中心)。
在这里插入图片描述

获取配置步骤
在这里插入图片描述

将配置管理交给Nacos管理的步骤

  1. 在Nacos中添加配置文件
    在这里插入图片描述
    在这里插入图片描述

  2. 在微服务中引入nacos的config依赖
    在这里插入图片描述

<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时nacos去读取哪个文件
spring:
  application:
    name: userservice #服务名称-需要保证和nacos配置名称一致
  profiles:
    active: dev #开发环境,这里是dev
  cloud:
    nacos:
      server-addr: localhost:8848 #Nacos地址
      config:
        file-extension: yaml #文件后缀名
        namespace: b47b494b-da3e-4cb8-b348-78213cfe0e77 #namespace的id

在这里插入图片描述

注意:需要删除/注释application.yml文件的对应配置
在这里插入图片描述

注意:
由于之前新建了一个名为“dev”的命名空间,在bootstrap.yml时,也需要配置命名空间,且application.yml的命名空间配置需保留,否则实例会到public下。
在这里插入图片描述

  1. 访问now接口,验证配置是否生效
    在这里插入图片描述

(二)配置热更新

经过(一),已经将部分配置交给Nacos来统一管理,但是此时更新Nacos配置信息,并没有实现配置的热更新。
配置热更新的两种方式:

@RefreshScope注解

如果是通过@Value注解注入,则使用该注解。
方式:在@Value注入的变量所在类上添加注解。
在这里插入图片描述

@ConfigurationProperties注解

通过@ConfigurationProperties注入,可以实现自动刷新
在这里插入图片描述

在这里插入图片描述
注意:

  • 不是所有的配置都适合放到配置中心,维护起来比较麻烦
  • 可以将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置

经过验证,经过配置之后都可以实现配置热更新。

(三)配置共享

多环境通用配置共享优先级

[服务名]-[环境].yaml > [服务名].yaml > 本地配置

微服务启动时会从nacos读取多个配置文件:

[spring.application.name]-[spring.profiles.active].yaml,例如:uesrservice-dev.yaml;
[spring.application.name].yaml,例如:userservice.yaml。

无论profiles如何变化,[spring.application.name].yaml文件一定会加载,因此多环境共享配置写入这个文件。
在这里插入图片描述
其中,userservice-dev.yml

pattern:
    dateformat: MM-dd HH:mm:ss:SSS

userservice.yml

pattern:
    date: yyyy-MM-dd
    envShareProp: 共享配置

在这里插入图片描述
端口8081按照dev环境启动,端口8082按照test环境启动,由于没有test环境配置,所以8082端口启动的接口获取的到的配置中dateformat为null,但是可以获取共享配置envShareProp
在这里插入图片描述

(四)搭建Nacos集群

整理完引用文章。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值