Nacos

  1. 首先进入到GitHub:Releases · alibaba/nacos (github.com)

  2. 选择自己希望的版本号:Nacos_第1张图片Nacos_第2张图片

    目前2.2.3为稳定版。

  3. 选择zip文件(tar.gz为Linux安装包):Nacos_第3张图片

  4. 下载好后,解压到指定目录,进入到bin目录下,点击 tartup.cmd 或者使用管理员身份打开cmd,使用

    startup.cmd -m standalone

    命令。

  5. 访问 (Nacos默认端口为8848)

    http://127.0.0.1:8848/nacos

Nacos注册中心

在cloud-demo父工程中添加spring-cloud-alibaba的依赖管理


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

注释掉order-service和user-service中原有的eureka依赖。

添加nacos的客户端依赖:


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

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

spring: 
    cloud:
        nacos:
            server-addr: loaclhost:8848

启动并测试

Nacos服务分级存储模型

服务跨集群调用问题:

服务调用尽可能选择本地集群的服务,跨集群调用延迟较高

本地集群不可访问时,再去访问其他集群

服务器集群属性

客户端:修改user service中的application.yml文件,添加如下内容
spring: 
    cloud:
        nacos:
            server-addr: localhost:8848
            discovery:
                cluster-name: HZ #配置集群名字,也就是机房位置,比如:HZ(杭州)

服务端:根据集群负载均衡

修改order service中的application.yml文件,设置集群位HZ
spring: 
    cloud:
        nacos:
            server-addr: localhost:8848
            discovery:
                cluster-name: HZ #配置集群名字,也就是机房位置,比如:HZ(杭州)
然后在order-service中设置负载均衡的IRule位NacosRule,这个规则会优先找寻与自己同集群的服务:
stock-service:
  ribbon:
    #  基于权重的负载均衡策略
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
注意将user-service的权重都设为1

根据权重负载均衡

实际部署会出现如下问题:

  • 服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望较好的机器承担更多的用户请求。

Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。

环境隔离namespace

Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离。

  1. 首先进入到Nacos操作面板,选择左侧namespaceNacos_第4张图片

  2. 选择新建命名空间:Nacos_第5张图片

  3. Nacos_第6张图片
  4. 得到新的命名空间:Nacos_第7张图片

  5. 修改order-service的application.yml, 添加 namespace

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/springcloud_study?useSSL=false&allowPublicKeyRetrieval=true
        username: root
        password: 123456
        driver-class-name:  com.mysql.cj.jdbc.Driver
      application:
        name: orderservice
      cloud:
        nacos:
          server-addr: localhost:8848
          discovery:
            cluster-name: HZ
            namespace: 43142f0e-9b6c-4747-b6e6-6790e0fe38e3 #填入id

总结:

  1. namespace来做环境隔离

  2. 每个namespace都有唯一id

  3. 不同namespace下的服务不可见

Nacos注册中心细节分析Nacos_第8张图片

临时实例和非临时实例

服务注册到Nacos时,可以选择注册为临时或非临时实例,通过下面来配置:

spring: 
    cloud:
        nacos:
            discovery:
                ephemeral: false # 设置为非临时实例

Nacos和Eureka的异同

共同点:

  1. 都支持服务注册和服务拉取

  2. 都支持服务提供心跳方式做健康检查

不同点:

  1. Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式。

  2. 临时实例心跳不正常会被剔除,非临时实例则不会被剔除。

  3. Nacos支持服务列表变更的消息推送模式,服务列表更新及时。

  4. Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Erueka采用AP模式。

Nacos配置管理

统一配置管理

配置更改热更新Nacos_第9张图片Nacos_第10张图片

配置获取的步骤如下:Nacos_第11张图片

引入Nacos的配置管理客户端依赖:


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

在userservice中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml

spring:
    application:
        name: userservice # 服务名称
    profiles:
        active: dev # 开发环境
    cloud:
        nacos:
            server-addr: localhost:8848
            config:
                file-extension: yaml # 文件后缀名

配置自动刷新

Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要下面两种配置实现:

方式1:在@Value注入的变量所在类上添加注释@RefreshScope

@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {

方式2:使用@ConfigurationProperties注解

新建配置类

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateFormat;
}

在usercontroller中注入依赖调用对象。

多环境配置共享

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

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

  • [spring.application.name].yaml, 例如:userservice.yaml

无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件

多种配置优先级:Nacos_第12张图片

你可能感兴趣的:(SpringCloud微服务,spring,cloud,nacos,java)