0%

nacos snippet

原理

https://juejin.cn/post/7136952484903256077

服务注册

Spring Cloud Alibaba Nacos Discovery 遵循了 Spring Cloud Common 标准,实现了 AutoServiceRegistration、ServiceRegistry、Registration 这三个接口。

在 Spring Cloud 应用的启动阶段,监听了 WebServerInitializedEvent 事件,当 Web 容器初始化完成后,即收到 WebServerInitializedEvent 事件后,会触发注册的动作,调用 ServiceRegistry 的 register 方法,将服务注册到 Nacos Server。

![nacos客户端注册机制](/images/nacos/nacos client register mechanism.png)

启动

  • 2.x版本启动,需要添加 -m属性./startup.sh -m standalone

心跳机制

健康检查

服务端接受到客户端的服务注册请求后,在创建空的Service后,就会开启健康检查任务

  • 在超过15秒没收到客户端心跳时,就会把注册表中实例的健康状态改为false
  • 超时30秒没有收到客户端心跳时,就会从注册表表剔除该实例,会使用HTTP DELETE方式调用/v1/ns/instance地址

open API

  • 获取所有服务列表
1
curl -X GET 'http://127.0.0.1:8848/nacos/v2/ns/service/list'
  • 获取心跳
1
2
3
4
5
6
7
8
9
10
11
12
13
curl -X PUT '127.0.0.1:8848/nacos/v2/ns/instance/beat' \
-d '{
"namespaceId": "jarvex_space",
"serviceName": "jarvex-common-group@@entity-server",
"ip": "127.0.0.1",
"port": "5333"
}'

curl -X PUT '127.0.0.1:8848/nacos/v2/ns/instance/beat' \
-d 'namespaceId=jarvex_space' \
-d 'serviceName=jarvex-common-group@@entity-server' \
-d 'ip=127.0.0.1' \
-d 'port=5333'
  • 创建命令空间

    1
    2
    3
    curl -d 'namespaceId=jarvex_space' \
    -d 'namespaceName=jarvex' \
    -X POST
  • 删除持久化实例

1
curl -X DELETE "http://127.0.0.1:8848/nacos/v2/ns/instance?serviceName=jarvex-gateway&ip=192.168.1.148&port=8085&namespaceId=jarvex_space&groupName=jarvex-common-group&ephemeral=false"

动态配置

方案一: nacos config配置中心获取

  • 通过配置nacos config和 controller获取

    1
    2
    3
    4
    5
    config:
    enabled: true
    server-addr: ${spring.cloud.nacos.server-addr}
    file-extension: yaml
    namespace: public

    controller类使用 @Refresh,刷新动态配置

方案二:nacos client 监听指定配置文件(recommended)

  • 编写监听类
  • 手动刷新配置

reference