微服务:nacos

使用Nacos代替eureka,步骤与eureka类似

  • 引入父工程依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
  • 引入子项目的依赖,并去除eureka的依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 配置springboot文件
 spring:
     cloud:
            nacos:
              server-addr: localhost:8848

Nacos服务分级存储模型

启动:

startup.cmd -m standalone

服务-集群-实例。

在服务调用时,尽可能访问本地集群,跨集群调用延迟很高。本地集群不可访问时,再去访问其他集群。

如何配置集群:

  • 在springboot配置文件中增加集群配置
cloud:
    nacos:
        server-addr: localhost:8848
            discovery:
                cluster-name: Bocai

如希望负载均衡的策略为优先调用本地集群的实例,则需要修改策略

userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

NacosRule特点:

  • 优先访问本地集群

  • 本地集群内的多个服务采用随机方式

  • 如果本地集群中的所有服务都无法访问,则会跨集群访问。

A cross-cluster call occurs,name = userservice # 一次跨集群的访问发生了

环境隔离

namespace——命名空间

一个命名空间中的服务可以互相调用,但是不同的namespace中的不能调用。

java.lang.IllegalStateException: No instances available for userservice
//找不到userservice可用的实例
  • 设置一个开发环境
cloud:
    nacos:
        server-addr: localhost:8848
            discovery:
            	namespace: c043e4a4-9940-470a-a313-a438392f8d7a # 命名空间

eureka与nacos

  • nacos将实例分为临时实例和非临时实例。临时实例的心跳检测与eureka类似,每隔一定时间进行一次检测,将坏掉的服务剔除。非临时实例,则nacos主动发送请求来查看服务状态,即使服务挂掉也不会主动剔除。
  • 都说服务的提供者将自身注册到eureka/nacos,然后服务的消费者定时进行拉取。nacos如果发现有服务坏掉,则会立即推送消息给消费者(push)
ephemeral: false #非临时实例

Nacos统一配置管理

在Nacos-配置管理中新建一个配置

一般明明规范为:xx(哪一个服务)-xx(哪一个环境).yaml,如:userService-dev.yaml

将核心配置填写在配置内容中,一般为一些可能会发生变化的配置,在开发环境中怎么样,项目上线了怎么样。

一般流程:

  • 项目启动
  • 读取本地配置文件application.yml
  • 创建spring容器
  • 加载bean

现在需要先读取nacos配置文件在读取本地文件,但是nacos的地址写在本地文件中,因此引入优先级更高的bootstrap.yml配置文件

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名
上一篇:学matplotlib基础,十分钟带你掌握matplotlib基本用法


下一篇:发布设置setting.xml