在微服务开发中 Nacos 作为 Springboot 和 Dubbo 框架常用的注册中心,本文将介绍怎么部署一个 Nacos 集群、Nacos 常用的 API 和 Springboot 如何使用 Nacos 进行微服务注册。
Nacos 安装
本次安装的 Nacos 为 2.3.2 版本,使用的平台是 k8s,请提前准备好 k8s 平台以及 kubectl 命令,以下是安装过程:
文件准备
git clone https://github.com/nacos-group/nacos-k8s.git
cd .\nacos-k8s\
本次将创建一个有三个节点的 Nacos 集群,如果测试的 k8s 只有一台,需要修改删除 nacos-quick-start.yaml
文件中的以下部分:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- nacos
topologyKey: "kubernetes.io/hostname"
一般在 Nacos 的使用中,我们都要开启密钥认证,同样在 nacos-quick-start.yaml
的 env 字段下添加以下内容:
env:
- name: NACOS_AUTH_ENABLE
value: "true"
- name: NACOS_AUTH_TOKEN
value: "eSecretKey012345678901234567890123456789012345678901234567890123456789"
- name: NACOS_AUTH_IDENTITY_KEY
value: "auth-key"
- name: NACOS_AUTH_IDENTITY_VALUE
value: "auth-value"
安装 Nacos 集群
添加完成之后执行以下命令进行集群的安装:
kubectl create -f ./deploy/mysql/mysql-local.yaml
kubectl create -f ./deploy/nacos/nacos-quick-start.yaml
在安装前需要先创建一个 Mysql 数据库,内部需要给 Nacos 初始一些表结构,这次使用这个 Mysql 是官方已经初始化好的数据库。Nacos 官方建议使用 Mysql 作为数据存储。
Mysql 和 Nacos 并未使用存储卷,都用的是临时存储,如果有需要,需要自行指定卷进行挂载。
Nacos 的常用的 API
以下为 Nacos 的常用的接口:
-
登录接口:
curl -X POST '10.104.155.63:8848/nacos/v1/auth/login' -d 'username=nacos&password=nacos' ' {"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxNzE1MTI0OH0.t7BjP6orK2YqZ-dFwnhDllT2mtod6tddpJyuRPjA58s","tokenTtl":18000,"globalAdmin":true,"username":"nacos"}
-
查询已经注册的服务接口:
curl -X GET '10.104.155.63:8848/nacos/v1/ns/service/list?pageNo=1&pageSize=10&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxNzE1MTI0OH0.t7BjP6orK2YqZ-dFwnhDllT2mtod6tddpJyuRPjA58s' {"count":2,"doms":["spring-cloud-config-extension","spring-cloud-gateway"]}
-
查询 namespace 的接口:
curl -X GET '10.104.155.63:8848/nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxNzE1MTI0OH0.t7BjP6orK2YqZ-dFwnhDllT2mtod6tddpJyuRPjA58s' {"code":200,"message":null,"data":[{"namespace":"","namespaceShowName":"public","quota":200,"configCount":0,"type":0}]}
10.104.155.63:8848 要改为自己 nacos 的 IP 地址。
Springboot Demo
已经准备好了一个 Demo,相关代码仓库的地址为https://gitee.com/next123/code/tree/master/nacos-test。
在运行代码之前需要修改 nacos-test/src/main/resources/application.yaml
文件中的以下字段:
server-addr: 192.168.8.109:30848 # 将192.168.8.109:30848修改为你 Nacos 的 8848 端口
然后在 nacos-test
执行以下命令运行代码:
mvn package
cd targaet
java -jar spring-boot-nacos-example-1.0-SNAPSHOT.jar
输出以下内容代表代码运行成功:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.4.RELEASE)
2024-06-02 23:19:31.095 INFO 47444 --- [ main] com.example.nacos_test.DemoApplication : No active profile set, falling back to default profiles: default
2024-06-02 23:19:32.455 INFO 47444 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=726522b2-581c-3e90-bc7b-edd2b4656fa5
2024-06-02 23:19:32.837 INFO 47444 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2024-06-02 23:19:32.865 INFO 47444 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2024-06-02 23:19:32.865 INFO 47444 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.38]
2024-06-02 23:19:32.975 INFO 47444 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2024-06-02 23:19:32.975 INFO 47444 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1842 ms
2024-06-02 23:19:33.068 WARN 47444 --- [ main] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources.
2024-06-02 23:19:33.069 INFO 47444 --- [ main] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2024-06-02 23:19:33.075 WARN 47444 --- [ main] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources.
2024-06-02 23:19:33.075 INFO 47444 --- [ main] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2024-06-02 23:19:33.370 INFO 47444 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2024-06-02 23:19:33.576 INFO 47444 --- [ main] o.s.s.c.ThreadPoolTaskScheduler : Initializing ExecutorService 'Nacos-Watch-Task-Scheduler'
2024-06-02 23:19:34.535 INFO 47444 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2024-06-02 23:19:34.572 INFO 47444 --- [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP demo 192.168.8.105:8080 register finished
2024-06-02 23:19:34.588 INFO 47444 --- [ main] com.example.nacos_test.DemoApplication : Started DemoApplication in 5.143 seconds (JVM running for 5.659)
访问 http://127.0.0.1:8080/ 可以看到以下输出:
Welcome to Spring Boot with Nacos!
然后可以在 nacos 上可以看到已经注册了一个服务,如下图所示:
http://127.0.0.1:8080/ 可以看到以下输出:
Welcome to Spring Boot with Nacos!
然后可以在 nacos 上可以看到已经注册了一个服务,如下图所示: