Nacos一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
功能:
1,动态配置服务
动态配置服务让您能够以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心化管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。
2,服务发现及管理
动态服务发现对以服务为中心的(例如微服务和云原生)应用架构方式非常关键。Nacos支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服务发现。Nacos也提供实时健康检查,以防止将请求发往不健康的主机或服务实例。借助Nacos,您可以更容易地为您的服务实现断路器。
3,动态DNS服务
通过支持权重路由,动态DNS服务能让您轻松实现中间层负载均衡、更灵活的路由策略、流量控制以及简单数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以DNS协议为基础的服务发现,以消除耦合到厂商私有服务发现API上的风险。
Nacos中文官方站点:
https://nacos.io/zh-cn/
Nacos Server依赖于java环境运行,jdk用1.8以上;
安装:
https://nacos.io/zh-cn/docs/quick-start.html
默认启动是集群方式:
我们修改startup.cmd默认配置 set MODE=“cluster”:
改成 standalone 单实例运行;
默认端口:8848
配置数据库:
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/db_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
执行sql脚本;
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
springcloudalibaba springcloud springboot版本
客户端配置
spring.application.name=nacos_config_test
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.name=nacos_config.properties
启动类加:
@EnableDiscoveryClient
通过@Value 读取配置:
通过@RefreshScope刷新读取最新配置;
Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。
有时候为了多模块项目的配置共享,我们需要进行配置拆分以及加载多配置集;
比如我们有10个业务模块项目;mysql,redis,reabbitmq等配置都是一样的,为了统一管理,我们在nacos配置中心需要单独的搞成一个通用配置,然后供主项目引入;
案例:
抽取公共配置:
mysql_common.properties
DEFAULT_GROUP
java1234.mysql.common=mysqlconfig
redis_common.properties
DEFAULT_GROUP
java1234.redis.common=redisconfig
业务模块项目CRM:
crm.properties
CRM_GROUP
java1234.crm.config=crm
业务模块项目OA
oa.properties
OA_GROUP
java1234.oa.config=oa
配置:
spring.cloud.nacos.config.extension-configs[0].data-id=mysql_common.properties
spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=redis_common.properties
spring.cloud.nacos.config.extension-configs[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.config.extension-configs[2].data-id=crm.properties
spring.cloud.nacos.config.extension-configs[2].group=CRM_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true
spring.cloud.nacos.config.extension-configs[3].data-id=oa.properties
spring.cloud.nacos.config.extension-configs[3].group=OA_GROUP
spring.cloud.nacos.config.extension-configs[3].refresh=true
1,配置导出和导入;
2,配置克隆功能;
3,历史版本,可以进行版本回滚;
4,监听查询,查看哪些客户端正在监听配置中心;
大的分布式微服务项目会根据业务,把项目拆分成多个业务模块项目,然后互相调用;
如何互相调用呢?
这里我们每个项目模块都需要去nacos服务注册中心注册下,登记下每个项目自身的地址和端口,然后其他的项目模块就可以通过Nacos找到需要调用的其他模块项目的地址了;
这样就可以实现服务的发现和调用;
引入依赖:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
配置服务发现:
spring:
application:
name: nacos-order
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
启动类加注解:
@EnableDiscoveryClient
能够让注册中心发现
引入依赖:
org.springframework.cloud
spring-cloud-starter-openfeign
定义Feign接口,生成动态代理对象
/**
\* @author java1234_小锋
\* @site www.java1234.com
\* @company Java知识分享网
\* @create 2021-03-26 8:53
*/
@FeignClient("nacos-stock")
public interface StockFeignService {
@RequestMapping("/stock/test")
public String test(@RequestParam("info")String info);
}
启动类:
@EnableFeignClients(basePackages = "com.java1234.feign")
开启Feign客户端支持
为了防止一个nacos崩掉,我们可以搞个3个或者3个以上的nacos集群部署,实现高可用;
startup.bat Model改成cluster集群模式
nacos程序文件复制三分,端口分别搞成 8848,8849 , 8850;
修改 application.properties 端口改下;
设置下IP
nacos.inetutils.ip-address=127.0.0.1
cluster.conf.example改成cluster.conf
以及配置上ip列表:
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850
https://www.bilibili.com/video/BV1WZ4y1w7ww?from=search&seid=6042407474899684032&spm_id_from=333.337.0.0