SpringCloud Alibaba环境集成之nacos详解
作者:study_alltheway
前言
在SpringCloud Alibaba的使用过程中,我总结为如下步骤:
- 下载并启动服务端
- 客户端引入spring-cloud-starter-alibaba的jar包
- 客户端properties或yml加入相关配置
- 客户端加上相应的注解开启功能
- 服务端增加相应配置
- 数据持久化,服务端集群部署
Nacos服务端
1.下载nacos
在github上查看最新版的nacos下载
2.单机启动nacos服务
默认是集群运行的,使用-m指定nacos单机运行
startup.cmd -m standalone
3.访问nacos服务
nacos默认端口为8848,用户名:nacos,密码:nacos,上下文路径:/nacos
http://127.0.0.1:8848/nacos
Nacos注册中心
1.代码中引入jar
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
2.properties加入配置
server.port=9001 # 应用名称 spring.application.name=springcloud-alibaba-consumer # Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 management.endpoints.web.exposure.include=*
3.启动类加入注解
@EnableDiscoveryClient
Nacos配置中心
1.代码中引入jar
只引入spring-cloud-starter-alibaba-nacos-config.jar, bootstrap.yml一直不生效,还需要引入spring-cloud-starter-bootstrap.jar
<!-- 参考官方文档,配置一直不生效,bootstrap中的配置没有被读取到,需要加入该依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
2.bootstrap.properties加入配置
# Nacos认证信息 spring.cloud.nacos.config.username=nacos spring.cloud.nacos.config.password=nacos spring.cloud.nacos.config.contextPath=/nacos # 设置配置中心服务端地址 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.config.refresh-enabled=true # 指定配置格式,默认是properties,可选text、json、xml、yaml、html、properties spring.cloud.nacos.config.file-extension=yaml # 默认是DEFAULT_GROUP,可以指定配置所在组 spring.cloud.nacos.config.group=dev # Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可 # spring.cloud.nacos.config.namespace= # 应用名称 spring.application.name=springcloud-alibaba-nacos-client # 激活 dev 的配置 spring.profiles.active=dev server.port=9006 server.servlet.context-path=/nacos-config
3.加入注解@RefreshScope
package com.ykq.springcloudalibabanacosclientdev.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author: kqyin * @date: 2022/3/24 16:24 * @Description: */ @RestController @RefreshScope public class NacosConfigController { @Value("${userName:}") private String name; @RequestMapping("/test/getName") public String getNacosTestName() { return name; } }
4.在nacos中配置相关信息
5.注意点
- nacos中配置的Group不是默认的DEFAULT_GROUP时,例如dev。需要在客户端中配置spring.cloud.nacos.config.group=dev,指定配置所在的组。
- nacos中的配置格式不是默认的properties时,需要在客户端中增加
- spring.cloud.nacos.config.file-extension配置,指定配置的内容文件格式
- nacos的Data ID 需要与${spring.cloud.nacos.config.prefix}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}值一致。当spring.cloud.nacos.config.prefix没有配置时,该值默认为spring.application.name。当spring.profile.active没有配置时,则为空。
nacos数据持久化
1.新建nacos数据库
2.执行sql
在nacos/conf目录下找到对应sql,并执行
3.修改conf/application.properties
在上面截图中的application.properties,取消以下注释,并修改对应的链接,用户名,密码
Nacos集群
1.修改文件cluster.conf
(1).不要使用连号的端口,我使用连号的端口就一直启动不起来
关于单机搭建nacos集群2.+版本启动报端口被占用问题,详细内容,见文末补充介绍。
(2).不要使用127.0.0.1的ip,会导致最终nacos集群数据共享出现问题。配置127.0.0.1,可以看到当服务启动后,cluster.conf会被重写,增加本机ip的一行数据。这个一定程度上算nacos的bug。
192.168.43.11:8848
192.168.43.11:8948
2.复制一份nacos服务端
修改port为8948后,分别启动两个nacos服务
3.使用nginx来做负载均衡
修改nginx.conf
upstream nacos{ server 127.0.0.1:8848; server 127.0.0.1:8948; } server { listen 8000; server_name nacos; location / { # 反向代理到上面的两台服务器 写上自定义的名称 proxy_pass http://nacos; } }
此时在使用8000端口,就可以轮训访问nacos的集群。
补充:
单机搭建nacos集群2.+版本启动报端口被占用问题。
异常信息:io.grpc.netty.shaded.io.netty.channel.unix.Errors$NativeIoException: bind(…) failed: 地址已在使用
原因:2.0版本的nacos需要四个端口,本机服务端口是连号如:8848/8849/8850第四个端口就会发生占用。
server.port(默认8848) raft port: ${server.port} - 1000 grpc port: ${server.port} + 1000 grpc port for server: ${server.port} + 1001
解决办法
将默认端口分开 不连号即可。核心就是避免第四个端口 grpc port for server = ${server.port} + 1001被占用。
到此这篇关于SpringCloud Alibaba环境集成之nacos详解的文章就介绍到这了,更多相关Spring Cloud Alibaba 整合Nacos内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- SpringCloud Hystrix熔断器使用方法介绍
- SpringCloud Gateway动态路由配置详解
- Spring Cloud Gateway远程命令执行漏洞分析(CVE-2022-22947)
- springcloud整合openfeign使用实例详解
- Spring Cloud Alibaba实现服务的无损下线功能(案例讲解)
- springcloud-gateway集成knife4j的示例详解
- Spring Cloud Ribbon 负载均衡使用策略示例详解
- SpringCloud @RefreshScope刷新机制深入探究
- SpringCloud @RefreshScope刷新机制浅析
- SpringCloud启动失败问题汇总
- 一文吃透Spring Cloud gateway自定义错误处理Handler
- SpringCloud Gateway路由组件详解
- SpringCloud OpenFeign基本介绍与实现示例
- Spring Cloud Gateway替代zuul作为API网关的方法
- SpringCloud使用Feign实现远程调用流程详细介绍
- SpringCloud修改Feign日志记录级别过程浅析
- SpringCloud开启session共享并存储到Redis的实现
- Spring Cloud原理以及核心组件详解