SpringCloud Alibaba Nacos服务注册与配置管理
Nacos
SpringCloud Alibaba Nacos是一个狗抑郁构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos:Dynamic Naming and Configuration Service
Nacos是注册中心+配置中心=Eureka+Bus+Config
Nacos安装并运行
本地环境必须有Java8以上版本和maven环境,先从官网上下载Nacos,然后解压安装包,直接在bin目录下的startup.cmd,运行成功后直接访问http://localhost:8848/nacos。用户名密码都是nacos,然后登陆到控制台。

服务注册与发现
如果要在您的项目中使用 Nacos 来实现服务注册/发现,使用 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-nacos-discovery的 starter。
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
如果不想使用 Nacos 作为您的服务注册与发现,可以将 spring.cloud.nacos.discovery 设置为 false。一般使用时设置成true。
application.yml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: '*'
之后输入localhost:8848/nacos进入web端nacos管理平台,然后可以在服务列表中看到注册成功的实例名称。

注册到Nacos中有服务提供者和服务消费者。消费者调用提供者的方式要稍微复杂一些。
因为Nacos的依赖中默认引入了Ribbon服务调用和负载均衡工具,因为在 Consumer 端需要去调用 Provider 端提供的REST 服务。例子中我们使用最原始的一种方式, 即显示的使用 LoadBalanceClient 和 RestTemplate 结合的方式来访问。
服务提供方Controller
@RestController
public class PayController {
@GetMapping(value = "/echo/{string}")
public String echo(@PathVariable String string) {
return "9001 nacos payment" + string;
}
}
服务提供方配置
server:
port: 9002
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: '*'
消费方的pomxml和提供者的一样,这里不再显示。
消费者的配置文件
server:
port: 83
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: nacos-order83-consumer
management:
endpoints:
web:
exposure:
include: '*'
# 消费者将要访问的微服务名称(服务提供者)
service-url:
nacos-user-service: http://nacos-payment-provider
消费方的配置类
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
消费者的controller
@RestController
public class OrderController {
@Resource
private RestTemplate restTemplate;
@Value("{service-url.nacos-user-service}")
private String SERVICE_URL;
@GetMapping(value = "/consumer/echo/{string}")
public String echo(@PathVariable String string) {
return restTemplate.getForObject("http://nacos-payment-provider/echo/" + string,String.class);
}
}
启动两个服务,然后访问消费者的localhost:83/consumer/echo/参数
输出“9002 nacos payment,参数”
服务注册中心对比

C:是所有节点在同一时间看到的数据是一致的;A:是所有的请求都会得到响应。
一般俩说如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么可以选择AP模式,当前主流的服务如Spring cloud和Dubbo服务,都适用于AP模式,AP模式是为了服务的可能性减弱了一致性,因此AP模式下只支持注册临时实例。
如果需要在服务级别编辑或者存储配置信息,那么CP是必要的,K8s服务和DNS服务适用于CP模式。CP模式下则支持持久化实例,此时则是以Raft协议伪集群运行模式,该模式下注册实例之前还必须先注册服务,如果服务不存在,则会返回错误。
Nacos引入中,默认包含有Ribbon相关依赖,因此负载均衡算法包含轮询,随机,加权等。
Nacos Config
使用Spring Cloud Alibaba Nacos Config,可基于SpringCloud的编程模式快速接入Nacos配置管理功能。
Nacos同SpringCloud-Config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置后,才能保证项目的正常启动。
SpringBoot中配置文件是存在优先级顺序的,bootstrap优先级高于application。
引入相关依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
配置文件
application.yml
spring:
profiles:
active: dev # 表示开发环境
#active: test # 表示测试环境
#active: info
bootstrap.yml
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
动态获取配置
在自定义的属性值所在的类上添加@RefreshScope:动态获取并刷新配置
@Value("${配置项的名}"):获取配置文件中指定配置项的值
controller
@RestController
@RefreshScope //动态刷新
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("config/info")
public String getConfigInfo(){
//将nacos控制平台上的配置信息返回
return configInfo;
}
}
启动nacos,主启动类启动。
进入localhost:8848/nacos/,登录nacos后,点击配置列表,选择添加配置。
这里需要注意的是,配置文件名的命名规范。
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}



将这三个属性值合并起来就是配置中心新建的配置文件的DataIdnacos-config-client-dev.yaml。只有这样动态刷新配置时才能识别。


这时配置好config.info的值后,访问controller指定路径。结果如下。

将配置文件中的版本改成2后重新访问。

如果配置中心和当前应用的配置文件中配置了相同的项,优先使用配置中心的配置。


{"msg":"success","empname":"zhangsan","code":0,"age":24}
Nacos的名称空间
类似于Java里面的包名和类名,最外层的namespace是可以用于区分部署环境的,GroupID和DataID用于区分不同的对象。
Nacos默认名称空间是public,Namespace主要用来实现隔离。
比如说现在有三个环境:开发,测试和生产环境,我们可以创建三个NameSpace,不同的Namespace之间是相互隔离的。
Service是微服务,一个Service可以包含多个集群,Nacos默认几圈是DEFAULT,集群Cluster是对指定微服务的一个虚拟划分。
将Service微服务分别部署在杭州机房和北京机房。
最后是Instance是微服务的实例。
指定spring.profile.active和配置文件的DataID 来使不同的环境下读取不同的配置
默认空间+默认分组+新建dev+test两个DataID。
通过`spring.profile.active属性就能进行火哥环境下配置文件的读取。



SpringCloud Alibaba Nacos服务注册与配置管理的更多相关文章
- SpringCloud Alibaba Nacos 服务注册
业务服务接入Nacos服务治理中心 启动Nacos访问地址为:http://101.200.201.195:8848/nacos/ 创建bom工程用于管理依赖(下方附加源码地址) 准备工作完成后开始接 ...
- Spring Cloud Alibaba | Nacos服务注册与发现
目录 Spring Cloud Alibaba | Nacos服务注册与发现 1. 服务提供者 1.1 pom.xml项目依赖 1.2 配置文件application.yml 1.3 启动类Produ ...
- Spring Cloud Alibaba Nacos 服务注册与发现功能实现!
Nacos 是 Spring Cloud Alibaba 中一个重要的组成部分,它提供了两个重要的功能:服务注册与发现和统一的配置中心功能. 服务注册与发现功能解决了微服务集群中,调用者和服务提供者连 ...
- SpringCloud Alibaba Nacos 服务治理中心
目录 一.什么是Nacos? 二.Nacos能干吗? 三.Nacos关键特性 四.Nacos中的基本概念 五.如何安装部署Nacos? 六.Nacos数据持久化 一.什么是Nacos? 英文全称Dyn ...
- SpringCloud之Nacos服务注册(十八)
一 服务提供配置 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <arti ...
- springcloudalibaba与nacos服务注册流程图
springboot + springcloud + springcloudalibaba + nacos 服务注册流程图: springboot ①WebApplicationContext ②st ...
- Nacos笔记01——使用Nacos作为SpringCloud项目的服务注册中心
前言 刚学SpringCloud时使用eureka作为服务注册中心,随着网飞公司eureka2.x不再更新,以及最近在公司实习接触到的SpringCloud项目是使用Nacos来做服务注册中心的,所以 ...
- Spring Cloud Alibaba(一) 如何使用nacos服务注册和发现
Nacos介绍 Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos 帮助您更敏捷和容易地构 ...
- Alibaba Nacos 学习(三):Spring Cloud Nacos Discovery - FeignClient,Nacos 服务注册与发现
Alibaba Nacos 学习(一):Nacos介绍与安装 Alibaba Nacos 学习(二):Spring Cloud Nacos Config Alibaba Nacos 学习(三):Spr ...
随机推荐
- CF484B Maximum Value
这个东西他一开始也是草稿 题解 我们考虑在值域上做,设值域为 \(m\) . 我们可以考虑数论分块,对于一对 \(a_i\) 和 \(a_j\) ,$\left \lfloor \frac{a_i}{ ...
- 华为云亮相QCon2020深圳站,带你体会大厂的云原生玩法与秘诀
摘要:在QCon全球软件开发大会上,华为云开发者生态总监张全文作为"云原生应用开发实践"专题出品人,携手华为云四位资深技术专家带来精彩分享. 作为当下技术领域最火热的技术趋势之一, ...
- TortoiseGit和intellij idea配置秘钥
第一:intellij idea 配置gitlab ssh key 1:打开git bash,不需要进入任何目录,直接输入 ssh-keygen -t rsa 一路回车 2:生成之后找到秘钥文件id_ ...
- 看我如何用微信上线CobaltStrike
前言 DLL劫持漏洞是老生常谈的一个漏洞,已经被前辈们各种奇技淫巧玩烂.但DLL劫持技术在后渗透和域渗透中的权限提升和权限维持都起到了至关重要的作用.本文简单剖析DLL劫持技术并通过实例应用来查看如何 ...
- STL——容器(Set & multiset)的概念和特点
1. Set 和 multiset 的概念 set 和 multiset 是一个集合容器,其中 set 所包含的元素是唯一的,集合中的元素按一定的顺序排列.set 采用红黑树变体的数据结构实现,红黑树 ...
- mysql 5.7.26 忘记root密码
1.关闭mysql [root@mysql ~]# /etc/init.d/mysqld stopShutting down MySQL.. SUCCESS! 2.修改参数文件/etc/my.cnf ...
- 【Python】自动化测试的7个步骤
我们对自动化测试充满了希望,然而,自动化测试却经常带给我们沮丧和失望.虽然,自动化测试可以把我们从困难的环境中解放出来,在实施自动化测试解决问题的同时,又带来同样多的问题.在开展自动化测试的工作中,关 ...
- 如何使用Pytest进行自动化测试
为什么需要自动化测试 自动化测试有很多优点,但这里有3个主要的点 可重用性:不需要总是编写新的脚本,除非必要,即使是新的操作系统版本也不需要编写脚本. 可靠性:人容易出错,机器不太可能.当运行不能跳过 ...
- 一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
摘要:一次由fork引发的时延抖动问题. 背景介绍 华为云数据库GaussDB(for Redis) 是一款基于计算存储分离架构,兼容Redis生态的云原生NoSQL数据库:它依靠共享存储池实现了强一 ...
- Ubuntu命令集(持续更新)
Ubuntu命令集,生活工作汇总,没有顺序.(持续更新...) 1 pwd:没有参数,在终端现实我们当前所处的文件夹位置:ctrl+l:清除当前终端屏: 2 --------------------- ...