理解nacos 服务治理(注册中心)、Nacos简介、下载与配置持久化到Mysql
Nacos简介
什么是Nacos
Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流且管理。
Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务’‘为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
Nacos全景图
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。很明显,是阿里巴巴旗下来源为了解决动态服务发现、配置管理和服务管理的组件。
理解nacos 服务治理(注册中心)
注册中心
nacos 服务治理 也称注册中心、也叫服务发现
官方的解释是
服务发现及管理
动态服务发现对以服务为中心的(例如微服务和云原生)应用架构方式非常关键。Nacos支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服务发现。Nacos也提供实时健康检查,以防止将请求发往不健康的主机或服务实例。借助Nacos,您可以更容易地为您的服务实现断路器。
发现和管理微服务,nacos也具有配置中心的功能,但本文主要强调注册中心的功能
Nacos = 服务注册中心 + 服务配置中心 = Eureka + Spring Cloud Config + Spring Cloud Bus + Kafka/RabbitMQ
如官方图所示
服务提供者------服务注册----》注册中心
服务消费者------服务发现-----》注册中心
服务消费者-------服务调用-----》服务提供者
服务注册:每个服务单元向注册中心登记自己提供服务非常小信息
服务发现:服务调用方向服务注册中心,并获取所有服务实例清单,实现对具体服务实例的访问
常用注册中心 Zookeeper(doubble推荐)
Eureka(自带的建立可以直接采用idea–》—》spring initializr—》 Cloud Discovery - Eureka Server)
Consul
Nacos
Nacos = eureka+config
既可以做注册发现,还加上配置
依赖文件中同时配置注册中心、配置中心
<!--注册中心客户端--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--配置中心客户端--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
服务发现的搭建(SpringBoot框架搭建nacos)
1、添加依赖
<dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-discovery-spring-boot-starter</artifactId><version>${latest.version}</version>
</dependency>
2、在 application.properties 中配置 Nacos server 的地址:
nacos.discovery.server-addr=127.0.0.1:8848
3、SpringBoot启动类
@SpringBootApplication
public class NacosDiscoveryApplication {public static void main(String[] args) {SpringApplication.run(NacosDiscoveryApplication.class, args);}
}
4、使用 @NacosInjected 注入 Nacos 的 NamingService 实例(核心)
Nacos对于服务注册和发现的支持是通过NamingService接口来实现的,对应的实现类是NacosNamingService。
nacos作为注册中心客户端的接口就是namingService,即名字服务。
需要写的代码,这一步骤,只需要这些
@Controller
@RequestMapping("discovery")
public class DiscoveryController {@NacosInjectedprivate NamingService namingService;@RequestMapping(value = "/get", method = GET)@ResponseBodypublic List<Instance> get(@RequestParam String serviceName) throws NacosException {return namingService.getAllInstances(serviceName);}
}
==============下面的为分析
使用 @NacosInjected 注入 Nacos 的 NamingService 实例:
@NacosInjectedprivate NamingService namingService;
服务消费方通过
namingService.getAllInstances(serviceName)
来实现服务发现,主动拉取服务。
public List<Instance> getAllInstances(String serviceName, String groupName, List<String> clusters, boolean subscribe) throws NacosException {ServiceInfo serviceInfo;if (subscribe) { // 是否订阅了服务// 从缓存或注册中心获取服务信息serviceInfo = hostReactor.getServiceInfo(NamingUtils.getGroupedName(serviceName, groupName), StringUtils.join(clusters, ","));} else {// 直接从注册中心获取服务// getServiceInfoDirectlyFromServer方法很简单,直接调用serverProxy.queryList(下面会讲)获取服务,serviceInfo = hostReactor.getServiceInfoDirectlyFromServer(NamingUtils.getGroupedName(serviceName, groupName), StringUtils.join(clusters, ","));}List<Instance> list;if (serviceInfo == null || CollectionUtils.isEmpty(list = serviceInfo.getHosts())) {return new ArrayList<Instance>();}return list;
}
=================分析结束
5、测试
再次访问 curl http://localhost:8080/discovery/get?serviceName=example,此时看到以上内容,那么nacos服务发现就测试成功了。
[{"instanceId": "127.0.0.1-8080-DEFAULT-example","ip": "127.0.0.1","port": 8080,"weight": 1.0,"healthy": true,"cluster": {"serviceName": null,"name": "","healthChecker": {"type": "TCP"},"defaultPort": 80,"defaultCheckPort": 80,"useIPPort4Check": true,"metadata": {}},"service": null,"metadata": {}}
]
服务发现的搭建(SpringCloud框架搭建nacos)
1、添加依赖
discovery就是nacos发现的意思。
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>${latest.version}</version>
</dependency>
2、在 application.properties 中配置 Nacos server 的地址:(服务提供者)
server.port=8070
spring.application.name=service-providerspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
server.port是服务端口,spring.application.name则是dataId拼接组成的一部分
3、使用@EnableDiscoveryClient 开启服务注册发现功能(服务提供者)
NacosProviderApplication 功能是启动该服务提供者,并且带了Hello Nacos Discovery测试实例,来测试它是服务提供者,并且启动成功了,正常使用
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {public static void main(String[] args) {SpringApplication.run(NacosProviderApplication.class, args);}@RestControllerclass DemoController {@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)public String echo(@PathVariable String string) {return "Hello Nacos Discovery " + string;}}
}
4、在 application.properties 中配置 Nacos server 的地址:(服务消费者)
server.port=8080
spring.application.name=service-consumerspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
5、使用@EnableDiscoveryClient 开启服务注册发现功能(服务消费者)
给 RestTemplate 实例添加 @LoadBalanced 注解,开启 @LoadBalanced 与 Ribbon 的集成。( Ribbon 本地负载均衡,在调用微服务接口的时候,会在注册中心上获取注册信息服务列表后缓存到JVM 本地,从而在本地实现RPC远程 服务调用技术。)(Ribbon是Netflix开发的客户端负载均衡器,为Ribbon配置服务提供者地址列表后,Ribbon就可以基于某种负载均衡策略算法,自动地帮助服务消费者去请求提供者。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等,我们也可以实现自定义负载均衡算法)
服务消费者执行http://localhost:8080/echo/2050,因为8080端口是消费者服务的端口,请求到RestTemplate的getForObject方法,自动拼接参数http://service-provider/echo/2050,然后请求到服务提供者去了,输出Hello Nacos Discovery 加上2050传过来的,那么就是Hello Nacos Discovery 2050
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {@LoadBalanced@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(NacosConsumerApplication.class, args);}@RestControllerpublic class TestController {private final RestTemplate restTemplate;@Autowiredpublic TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)public String echo(@PathVariable String str) {return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);}}
}
6、测试
启动 ProviderApplication 和 ConsumerApplication ,调用 http://localhost:8080/echo/2050,返回内容为 Hello Nacos Discovery 2050。
下载与配置持久化到Mysql
实现
Nacos官方文档:
https://nacos.io/zh-cn/docs/quick-start.html
Nacos下载地址:
https://github.com/alibaba/nacos/releases
选择指定的稳定版本进行下载,这里是Windows,所以选择zip包进行下载
下载完成在解压到磁盘某目录
Nacos持久化
防止 Nacos 宕机或重启后数据丢失,Nacos 支持将数据统一持久化到数据库 Mysql(在不配置Nacos持久化到Mysql时,
默认 Nacos 内置了一个嵌入式数据库derby,将一些数据保存到了内置的数据库上,多台 Nacos 就会出现多个内置数据库)。
连接要进行Nacos持久化的Mysql数据库,新建数据库nacos_config
为什么叫nacos_config这个数据库名,因为上面解压之后的Nacos中的conf目录下的nacos-mysql.sql文件中
其默认的数据库名就是nacos_config
新建完数据库之后在此数据库中执行上面的nacos-mysql.sql文件,实现数据库的初始化。
然后再回到Nacos解压目录下的conf目录下的application.properties
将上面这段打开持久化Mysql的代码去掉注释,并将连接到的数据库的url和用户名密码改为自己的。
启动Nacos
然后再回到上面解压目录后的bin目录下
这里的startup.cmd和shtudown.cmd就是在Windows下的启动好关闭命令,但是如果直接双击的话会报错。
这是因为这里Nacos没有配置集群模式,而是使用的单机模式,所以编辑startup.cmd,
将MODE修改为standalone
默认MODE的值是"cluster"
所以在走下面的逻辑时会走集群模式的逻辑
编辑之后,双击startup.cmd
然后打开浏览器访问
http://localhost:8848/nacos/
默认用户名密码都是nacos
登录成功后
理解nacos 服务治理(注册中心)、Nacos简介、下载与配置持久化到Mysql相关推荐
- java 服务注册中心_服务治理的含义和java最流行的微服务框架服务治理注册中心的搭建...
原标题:服务治理的含义和java最流行的微服务框架服务治理注册中心的搭建 Spring Cloud Eureka基于Netflix Eureka做了二次封装,是Spring Cloud Netflix ...
- 微服务之注册中心Nacos
Nacos是什么? Nacos是阿里巴巴的产品,选择是SpringCloud中的一个组件,比Eureka组件功能更加丰富. 一个项目要想成为微服务项目体系的一部分必须将当前项目的信息注册到Nacos. ...
- Nacos简介、下载与配置持久化到Mysql
场景 什么是Nacos Nacos致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发 现.服务配置.服务元数据及流且管理. Nacos帮助您更敏捷和容易 ...
- 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关
微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...
- 分布式服务框架Dubbo集成Nacos框架实现注册中心
在讨论Nacos之前,我们先讨论一下CAP理论 CAP理论是分布式场景绕不开的重要理论 一致性:所有节点在同一时间具有一样的数据: 可用性:保证每个请求不管成功还是失败都有响应: 分区容忍性:系统中任 ...
- 微服务系列之ZooKeeper注册中心和Nacos注册中心Nacos和Zookeeper对比
一.ZooKeeper注册中心 Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,推 ...
- 微服务:注册中心ZooKeeper、Eureka、Consul 、Nacos对比
前言 服务注册中心本质上是为了解耦服务提供者和服务消费者.对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的.更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数 ...
- 服务注册中心Nacos
文章目录 一.服务注册中心Nacos最佳实践 1.Nacos注册中心简介 背景分析 Nacos概述 构建Nacos服务 初始化配置 服务启动与访问 2.服务注册与调用入门(重点) 业务描述 生产者服务 ...
- Java学习四阶段-07 服务注册中心Nacos
Nacos注册中心简介 背景分析 在微服务中,首先需要面对的问题就是如何查找服务(软件即服务),其次,就是如何在不同的服务之间进行通信?如何更好更方便的管理应用中的每一个服务,如何建立各个服务之间联系 ...
最新文章
- hashCode之一--两个对象值相同,有相同的hash code
- 鸢尾花识别问题,萼片有什么用?
- 【百度地图】——利用三级联动加载百度地图
- makeObjectsPerformSelector 方法的用法
- 转载需作者授权是如何实现的
- SPOJ Can you answer the Queries系列
- [转载]Git安装以及使用Git 管理个人文档
- 号外!德国惊现大罢工--要求每周上班28小时
- http | 状态码
- 【PS】黑白照片改为彩色照片
- 什么叫软件前端测试,前端页面测试需要测试哪些内容?前端自动化测试的实现小技巧...
- Linux删除账号及主目录,linux 删除用户账号和主目录
- Pycharm安装chardet模块
- 使用Visio画各种可视化的流程图之活动图和状态图
- 《老路用得上的商学课》21-25学习笔记
- Flixel Dame 坦克大战(一)地图
- mysql 长度存储汉字_mysql 长度存储汉字
- Win10突然卡死的原因调查(转自yzhang)
- (最新,所有kali版本通用)kali中安装搜狗输入方法
- Word批量转TXT宏
热门文章
- 群晖(NAS)拆下来的硬盘读取问题
- 一等奖方案|2021 CCF BDCI个贷违约预测赛题@雅俗共赏 队解题思路
- shineblink XD-58C心率脉搏测量传感器详解
- openssl生成证书链多级证书、证书吊销列表(CRL)
- 建模到底怎么学呢?怎样才能高薪入职,如何不走冤枉路
- Centos7中使用parted快速分区挂载磁盘
- 2022-2028年全球及中国电气引线行业投资前景分析
- 自由之路,从建站开始
- fatal: 目标路径 ‘CWFF‘ 已经存在,并且不是一个空目录。
- php生成随机数random,PHP生成随机数的方法实例分析