Nacos
Nacos 可以发现、配置和管理微服务。它提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 可以更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
1 Nacos?
服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:
2 功能
2.1 动态配置服务
动态配置服务让您能够以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心化管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。
2.2 服务发现及管理
动态服务发现对以服务为中心的(例如微服务和云原生)应用架构方式非常关键。Nacos支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服务发现。Nacos也提供实时健康检查,以防止将请求发往不健康的主机或服务实例。借助Nacos,您可以更容易地为您的服务实现断路器。
2.3 动态DNS服务
通过支持权重路由,动态DNS服务能让您轻松实现中间层负载均衡、更灵活的路由策略、流量控制以及简单数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以DNS协议为基础的服务发现,以消除耦合到厂商私有服务发现API上的风险。
3 windows单机
1、修改nacos-server-xxx的bin目录下的startup.cmd
set MODE="standalone"
2、修改config目录下的application.properties文件数据库连接的内容
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://node2:3306/db_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=MyNewPass4!
3、新建库db_nacos,将config目录下的nacos-mysql.sql脚本文件导入该库
4、启动bin目录下的startup.cmd
5、登录http://localhost:8848/nacos,默认账号密码都是nacos
4 nacos管理平台新建配置
1、管理平台配置
2、项目内部bootstrap.properties文件配置
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
3、远程配置中心(nacos管理平台)的优先级比配置文件优先级高(项目配置文件)
5 数据模型
5.1 定义
1、Nacos数据模型key(DataID)是由三元组唯一确定,分别是:Namespace(默认是空串)、公共命名空间(public)、分组默认是DEFAULT_GROUP
所以如果dataId取名相同,但组名不同,那也是不同的
5.2 新建命名空间
上文所提,每个命名空间就是一层维度,后续在项目配置文件中指定命名空间即可
spring.application.name=nacos_config_test
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=f6bdfa3a-aa29-49b3-a567-ccc2ddeaabbd
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.name=nacos_config.properties
6 多配置集
抽取公共配置,对应nacos管理平台中具体命名空间下的对应配置,所以后面直接修改nacos端的配置,其他端会自动更新,解耦维护方便
spring.application.name=nacos_config_test
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=f6bdfa3a-aa29-49b3-a567-ccc2ddeaabbd
#spring.cloud.nacos.config.group=DEFAULT_GROUP
#spring.cloud.nacos.config.name=nacos_config.properties
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
7 其他功能
7.1 导入导出
导出配置是一个zip包,里面其实就是配置的文件
7.2 克隆
类似导入导出功能,但是不用中转直接克隆
7.3 历史版本
7.4 监听
监控查看客户端是否掉线
8 服务注册与发现
8.1 定义
分布式的微服务项目中各个模块会去访问其他模块的项目。互相调用,就需要一个nacos中间者获取所有模块项目的地址和端口,以便于互相访问
8.2 实现
1、新建application.yml
server:
port: 8082
servlet:
context-path: /
spring:
application:
name: nacos-order
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
2、启动服务
@SpringBootApplication
@EnableDiscoveryClient
public class NacosOrderApplication {
public static void main(String[] args){
SpringApplication.run(NacosOrderApplication.class,args);
}
}
3、查看nacos平台是否有服务
4、案例
@RestController
@RequestMapping("/stock")
public class StockController {
@RequestMapping("/test")
public String test(String info) {
return "库存模块接收到的信息:" + info;
}
}
@FeignClient("nacos-stock")
public interface StockfeignService {
@RequestMapping("/stock/test")
public String test(@RequestParam("info") String info);
}
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private StockfeignService stockfeignService;
@RequestMapping("/test")
public String test(){
return stockfeignService.test("youpei");
}
}
启动服务,访问http://localhost:8082/order/test,返回库存模块接收到的信息:youpei
8.3 负载均衡
如果多实例,比如上面的多个库存实例,其他配置不怎么变化,那就会轮询访问test,以便达到负载均衡的目的,查看服务可以看到,也可以配置权重
9 服务领域模型
实例:
配置文件配置,主要是namespace和cluster-name
server:
port: 8088
servlet:
context-path: /
spring:
application:
name: nacos-stock
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: f6bdfa3a-aa29-49b3-a567-ccc2ddeaabbd
cluster-name: znv
10 集群
1、修改启动脚本中配置,改为集群模式
set MODE="cluster"
2、nacos程序文件复制三分,端口分别搞成 8848,8849 , 8850
3、设置IP:nacos.inetutils.ip-address=127.0.0.1(部署服务器要局域网ip)
4、cluster.conf.example改成cluster.conf,并修改cluster.conf中的ip列表
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850
5、启动三个nacos服务,刷新web端口
nacos集群的作用主要在于高可用,即使三个两个都挂,都可正常使用
|