spring cloud alibaba nacos 服务注册
版本选择:链接
1. 下载安装
nacos下载:链接
1. 配置nacos的数据库
nacos-server-2.3.2.zip
解压后,进入conf
目录
- 创建nacos的数据库
数据库文件: /nacos/conf/mysql-schema.sql - 修改
application.properties
文件,创建数据库的名字,用户,密码修改配置文件
# nacos 使用的数据库配置
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
spring.sql.init.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=123456
2. 启动nacos
进入nacos的bin目录
// 启动nacos
[root@centos9 bin]# ./startup.sh
// 关闭nacos
[root@centos9 bin]# ./shutdown.sh
// 查看nacos的运行情况
[root@centos9 bin]# cat /opt/springcloud/nacos/logs/start.out
当显示nacos图标时,nacos启动成功:
[root@centos9 bin]# cat /opt/springcloud/nacos/logs/start.out
/www/server/java/jdk-17.0.8/bin/java -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Xlog:gc*:file=/opt/springcloud/nacos/logs/nacos_gc.log:time,tags:filecount=10,filesize=100m -Dloader.path=/opt/springcloud/nacos/plugins,/opt/springcloud/nacos/plugins/health,/opt/springcloud/nacos/plugins/cmdb,/opt/springcloud/nacos/plugins/selector -Dnacos.home=/opt/springcloud/nacos -jar /opt/springcloud/nacos/target/nacos-server.jar --spring.config.additional-location=file:/opt/springcloud/nacos/conf/ --logging.config=/opt/springcloud/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288,--.,--.'|,--,: : | Nacos 2.3.2
,`--.'`| ' : ,---. Running in stand alone mode, All function modules
| : : | | ' ,'\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 1391567
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://192.168.3.234:8848/nacos/index.html
' ' ;. ;.--. .-. | / / '' | |: :| : ;_
| | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | `----. \
| | '`--' / / ,. |' | '.'|\ \ / / /`--' /
' : | ; : .' \ : : `----' '--'. /
; |.' | , .-./\ \ / `--'---'
'---' `--`---' `----'
3. 登录配置中心
IP:8848/nacos
页面:
4. 关于鉴权,查看官网文档
官网关于鉴权的网页链接,查看网页中的服务端如何开启鉴权部分
2. 注册服务
参考 spring cloud alibaba 官网 ( 链接 )中 接入 Nacos 服务注册与发现 部分
1. 创建一个maven工程
不直接创建springboot项目,引入springbootweb的依赖,创建一个web工程
- 截取部分pom
<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-boot.version>3.2.4</spring-boot.version><spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- nacos 的服务注册依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!--引入spring cloud alibaba 做依赖的版本控制--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
2. yml配置
server:port: 8001
spring:application:name: nacos-providercloud:nacos:server-addr: centos9-server:8848username: nacospassword: nacosdiscovery:
# server-addr: ${spring.cloud.nacos.server-addr} # 默认值: ${spring.cloud.nacos.server-addr}
# username: ${spring.cloud.nacos.username} # 默认值: ${spring.cloud.nacos.username}
# password: ${spring.cloud.nacos.password} # 默认值: ${spring.cloud.nacos.password}
3. 启动web项目
启动后会在服务列表中看到
4. 注册端口9848
配置文件里设置server.port=8848 时,客户端会先通过 8848 端口获取 Nacos 服务器的元信息,其中就包含了 gRPC 端口信息,之后再使用 gRPC 端口 9848 来进行后续的服务注册与发现操作。
3. 服务配置
1. 命名空间
- 在nacos中创建命名空间
- 在yml中指定命名空间,默认为
public
注意:namespace的值是命名空间ID
discovery:
# server-addr: ${spring.cloud.nacos.server-addr} # 默认值: ${spring.cloud.nacos.server-addr}
# username: ${spring.cloud.nacos.username} # 默认值: ${spring.cloud.nacos.username}
# password: ${spring.cloud.nacos.password} # 默认值: ${spring.cloud.nacos.password}namespace: 7749e5ab-e65b-4a5c-a36c-4978fadcfef3
- 启动项目
会在相应的命名空间中看到注册的服务
2. 分组名称
配置:group。 默认分组:DEFAULT_GROUP
cloud:nacos:discovery:......service: provider-3-change-name # 服务名 默认值: ${spring.application.name}group: A-group # 分组名称metadata: # 自定义元数据version: 1.0.0env: test
3. 服务名称
配置:service。 默认是spring.application.name的名字
cloud:nacos:discovery:......service: provider-3-change-name # 服务名 默认值: ${spring.application.name}
4. 实例数
- 命名空间、分组名称、服务名称3个都相同的就是相同的实例
- 相同的实例应提供的服务是相同的
5. 服务的元数据
配置:metadata。
metadata是map结构,key和value随意指定
cloud:nacos:discovery:......metadata: # 自定义元数据version: 1.0.0env: test
6. 集群配置
相同的服务,分配在不同的机房
discovery:...cluster-name: beijing-lian-tong
7. 权重
负载均衡
spring:...discovery:weight: 10
8. 心跳相关
服务向nacos发送心跳设置
spring:discovery:# 心跳设置,单位毫秒heart-beat:enabled: true # 是否开启心跳heart-beat-interval: 5000 # 心跳间隔时间heart-beat-timeout: 10000 # 不发送心跳后,从健康转为不健康的时间ip-delete-timeout: 30000 # 从不健康到实例下线时间
4. 消费服务
只能消费命名空间、分组名称相同的服务
- yml配置与服务相同
- 代码
@RestController
public class Consumer1Controller {private RestTemplate restTemplate = new RestTemplate();@Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("/consumer1")public String hello(){// 获取在同一命名空间,同一组中的所有服务的服务名称(结果中也包括自己的名称)List<String> services = discoveryClient.getServices();// 根据服务名获取实例List<ServiceInstance> instances = discoveryClient.getInstances("provider-8001");if (CollectionUtils.isEmpty(instances)) throw new RuntimeException("没有找到服务");// 获取实例列表中的任一实例ServiceInstance serviceInstance = instances.get(0);// 获取该实例的端口号和ipString host = serviceInstance.getHost();int port = serviceInstance.getPort();// 向服务发送请求,并返回结果String url = "http://"+host +":"+ port+"/hello?name=张三";String result = restTemplate.getForObject(url, String.class);return result;}
5. 对外暴漏端点,为监控服务
增加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
yml中配置:
spring:.....
management:endpoints:web:exposure:include: "*"