首页 > 其他分享 >微服务-Nacos

微服务-Nacos

时间:2023-06-09 10:59:27浏览次数:23  
标签:服务 application spring Nacos nacos yaml 实例

Nacos

startup.cmd -m standalone

注意:
1、Nacos2.0的服务端完全兼容1.X客户端
2、Nacos2.0客户端由于使用了gRPC,无法兼容Nacos1.X服务端,请勿使用 2.0 以上版本客户端连接Nacos1.X 服务端。
3、默认用到的 nacos 的客户端jar包为 2.0 的,无法兼容 Nacos1.X 服务端。需要在本地安装运行 Nacos2.X 的服务端或者将 SpringCloudAlibaba 版本换成 2.2.6.RELEASE (此版本默认用到的客户端jar包为1.X的)

Nacos 服务分级存储模型

一级:服务,例如 document-service
二级:集群,例如 杭州,上海,深圳,服务相互调用时优先选择同一集群内的实例
三级:实例

根据集群负载均衡

# 将实例加入HZ集群
spring.cloud.nacos.discovery.cluster-name=HZ

# 配置ribbon负载均衡规则
# 假设当前在documentservice的application.yml中,则此配置表明,documentservice对userservice服务的调用将优先考虑与documentservice同一集群的userservice的实例,对同一集群内的多个实例随机选择
userservice.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule

Nacos权重配置

0-1之间

环境隔离 NamsSpace

不同命名空间下的实例无法相互访问

# 1、在 Nacos 控制台添加命名空间
# 2、添加 application.yml 配置
spring.cloud.nacos.discovery.namespace=<第1步生成的命名空间ID>

临时实例与非临时实例

1、临时实例:实例主动向注册中心发送心跳,表明该实例仍然存活,nacos会剔除不活跃的临时实例
2、非临时实例:nacos主动发送请求询问实例是否存活,nacos不会从实例列表中剔除不存活的非临时实例

nacos一旦发现实例死亡,会立即报告服务消费者,消费者则从其服务列表缓存中剔除该服务提供者的信息,从而不会向该实例发出请求

# 配置当前实例为非临时实例
spring.cloud.nacos.discovery.ephemeral=false

Nacos与eureka的区别

1、Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式(主动检测模式会增大服务器压力)
2、临时实例心跳不正常会被剔除,非临时实例则不会被剔除
3、Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
4、Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka测i用AP方式

Nacos配置管理

1、在Nacos中添加配置文件:

DataId: <documentservice>-[dev|test|prod].[yaml|properties]
Group: 默认

2、在微服务中引入Nacos的config依赖

<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

3、在微服务中添加bootstrap.yml,配置nacos地址,当前环境,服务名称,文件后缀名,这些决定了程序启动时Nacos去读取哪个配置文件

在微服务的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml

# 这三项配置的组合即为Nacos控制台中配置的DataId:documentservice-dev.yaml
spring.application.name=documentservice
spring.profiles.active=dev
spring.cloud.nacos.config.file-extension=yaml

# Nacos服务器的地址
spring.cloud.nacos.server-addr=localhost:8848

4、配置热更新

Nacos中的配置文件变更后,微服务无需重启就可以感知,不过需要通过以下两种方式实现,属性的注入方式不同,刷新的方式也不同

1、通过@Value注解注入,结合@RefreshScope来刷新

@Value("${pattern.dateformat}")
private String dateformat;

则应在@Value注入的变量所在类上添加注解@RefreshScope:

@RefreshScope
public class DocumentController{
	@Value("${pattern.dateformat}")
	private String dateformat;
}

2、通过@ConfigurationProperties注入,自动刷新

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties{
	private String dateformat;
}

@RestController
public class DocumentController{
	@Autowired
	private PatternProperties properties;
	
	@GetMapping("show")
	public void show(){
		System.out.Println(properties.dateformat);
	}
}

使用这种方式注入的属性无需其他配置,即可自动刷新

5、多环境配置共享

微服务启动时会从Nacos读取多个配置文件
1、[spring.application.name]-[spring.profile.active].yaml,例如documentservice-dev.yaml
2、[spring.application.name].yaml,例如document.yaml
无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享的配置可以写入这个文件

6、配置的优先级

最高优先级:[spring.application.name]-[spring.profile.active].yaml
第二优先级:[spring.application.name].yaml
最低优先级:微服务本地配置

集群配置

1、进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf
2、向cluster.conf中添加每一个节点的信息

127.0.0.1:8841
127.0.0.1:8842
127.0.0.1:8843

3、修改application.properties文件,添加数据库配置

# 使用mysql来存储Nacos的数据
spring.datasource.platform=mysql

# 数据库的数量
db.num=1
# 每个数据库的连接参数
db.url.0=jdbc:mysql://127.0.0.1:3306/.........
db.user.0=......
db.password.0=......

# 分别配置每个节点的端口号
server.port=8841/8842/8843

4、分别启动每个Nacos

startup.cmd

5、使用Nginx做反向代理与负载均衡

upstream nacos-cluster {
	server 127.0.0.1:8841;
	server 127.0.0.1:8842;
	server 127.0.0.1:8843;
}

server {
	listen		80;
	server_name	localhost;
	
	location /nacos {
		proxy_pass	http://nacos-cluster
	}
}

标签:服务,application,spring,Nacos,nacos,yaml,实例
From: https://www.cnblogs.com/tanmujin/p/17440824.html

相关文章

  • 微服务-统一日志收集
    基于logback、logstash、mongodb的统一日志收集1、引入logstash日志格式的编码器依赖<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.2</version></dependency>2、编辑lo......
  • CoreDNS搭建内网DNS服务
     蚂蚁背大象2022年02月16日23:57 ·  阅读1502「这是我参与2022首次更文挑战的第30天,活动详情查看:2022首次更文挑战」1.背景因为自己有在开发一个聊天的服务,注册中心设计参考了RocketMQ的NameServer。注册中心都是单独部署,注册中心和注册中心之间没有数据交互。......
  • dnsmasq( DNS和DHCP)服务
    目录一、简介二、dnsmasq安装三、dnsmasq的解析流程四、dnsmasq的作用以及相关配置五、DHCP服务器设置 一、简介Dnsmasq提供DNS缓存和DHCP服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存DNS请求来提高对访问过的网址的连接速度。作为DHCP服务器......
  • 【HMS Core】华为帐号服务,获取Access Token报错{sub_error:20152,error_description:inv
    ​ 【问题描述】华为账号服务,接口获取AccessToken报错:{sub_error:20152,error_description:invalidcode,error:1101} 【问题分析】根据官网提示,是code格式不正确造成的,需要检查参数配置​ 【解决方案】1、此问题解决方案,可以参考这篇帖子https://developer.huawei.com/......
  • 美团太细了:Springcloud 微服务优雅停机,如何实现?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 【HMS Core】华为帐号服务,获取Access Token报错{sub_error:20152,error_description:inv
     【问题描述】华为账号服务,接口获取AccessToken报错:{sub_error:20152,error_description:invalidcode,error:1101}【问题分析】根据官网提示,是code格式不正确造成的,需要检查参数配置【解决方案】1、此问题解决方案,可以参考这篇帖子https://developer.huawei.com/consumer/cn/forum/......
  • 搭建邮件服务器之使用Postfix收发邮件
    发邮件0x01安装postfixaptinstallpostifx弹窗中选择第二个,其他配置项内容如下Noconfiguration:表示不要做任何配置;InternetSite:表示直接使用本地SMTP服务器发送和接收邮件;Internetwithsmarthos:表示使用本地SMTP服务器接收邮件,但发送邮件时不直接使用本地SMTP服务器,......
  • 数据库服务器
    su-oraclesqlplus/assysdba启动数据库startup停止数据库shutdownimmediate数据库监听su-oracle启动监听服务lsnrctlstart停止监听服务lsnrctlstop查看监听状态lsnrctlstatus  --切到Oracle账户;su-oracle--进入oracle控制台并以dba身份登录oracle数据......
  • gprc python调用c++远程服务
      客户端和服务端之间不是直接通信的,需要通过生成的代码和protocolbuffers传输协议(可使用其他传输协议替换)进行通信。开发步骤:  1..proto文件----message和servicemessage是消息类型,定义参数,service是接口类型,定义远程服务的方法在grpc中有四种类型的服务方法:参考......
  • SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
    前言这篇博客主要记录的是谷粒商城项目的完整开发过程大家想看的话也可以去这里看看:笔记地址传送门后续还会继续维护这个笔记一、项目架构二、技术总和三、开发准备1、开发环境搭建2、工程初始化四、分布式基础篇(全栈开发篇)五、分布式高级篇(微服务架构篇)......