SpringCloud Alibaba实战--第二篇:NacosⅠ服务注册和配置中心
系列文章目录
微服务新王SpringCloudAlibaba
文章目录
- 系列文章目录
- 前言
- 一、Nacos是什么?能干啥?
- 二、Nacos下载及安装
- 1. 下载
- 2. 安装并运行
- 3. 对比Eureka
- 三、Nacos作为服务注册中心的演示
- 1. 先构建好基础工程(一篇一篇看过来的不用重新构建)
- 话不多说,立马开干
- 2. 创建基于Nacos的服务提供者
- 3. 启动测试
- 4. 创建一个9002模块(方便后面负载均衡测试)
- 5. 创建基于Nacos的服务调用者模块
- 6. 编写服务调用业务类
- 7. 启动测试调用
- 四、Nacos作为服务注册中心的对比
- 1. Eureka、Zookeeper、Consul的对比
- 之前SpringCloud注册中心几篇提到的CAP介绍
- 2. Nacos:我都要
- 总结
前言
- 如果说有一个SpringCloudAlibaba有一个组件能够封神的话,那么毫无悬念,他就是Nacos!
- 前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。
- 服务的命名,配置管理。
- Nacos是SpringCloudAlibaba的核心组件。
一、Nacos是什么?能干啥?
- 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- Nacos: Dynamic Naming and Configuration Service
- Nacos就是注册中心 + 配置中心的组合。
- Nacos = Eureka+Config +Bus。
- 替代Eureka做服务注册中心。
- 替代Config做服务配置中心。
- 据说 Nacos 在阿里巴巴内部有超过 10 万的实例运行,已经过了类似双十一等各种大型流量的考验。
二、Nacos下载及安装
首先本地要有Java8+Maven环境。
1. 下载
进入Nacos官网
https://nacos.io/zh-cn/index.html
点击windows下的zip包,进行下载。
2. 安装并运行
解压安装包,使用CMD小黑窗口直接运行bin目录下的startup.cmd
启动成功之后访问页面查看Nacos,端口号是8848,默认账号密码都是nacos
http://localhost:8848/nacos
3. 对比Eureka
- 首先,Nacos和Ehreka做注册中心功能点是类似的,也都提供有web页面。
- 其次,Eureka做注册中心需要我们自己搭建模块,而Nacos则直接封装好的,因此选择Nacos会更方便一点。
- Nacos是中文的,多数数据都是表格的方式呈现的,对我们来说更加友好。
三、Nacos作为服务注册中心的演示
我们测试下Nacos作为服务注册中心,然后我们将服务注册进Nacos。
官方文档(我们的配置都是根据官方文档来的):
https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_config
1. 先构建好基础工程(一篇一篇看过来的不用重新构建)
构建基础父工程
Rest风格微服务
传统分布式方法
改造工程,抽取公共模块
想偷懒的请下载;gitee上我上传的代码
基础工程构建完成的目录结构:
启动所有模块,访问
localhost:7001
显示如下,代表基础工程没问题
话不多说,立马开干
2. 创建基于Nacos的服务提供者
模块名
cloudalibaba-provider-payment9001
在父工程的POM中引入依赖(我们已经添加过)
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.1.0.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>
新建的9001模块的pom,主要是spring-cloud-starter-alibaba-nacos-discovery
<dependencies><!--SpringCloud ailibaba nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- SpringBoot整合Web组件 --><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><!--日常通用jar包配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
application.yml
server:port: 9001spring:application:name: nacos-payment-provider # 注册进注册中心的服务名cloud:nacos:discovery:server-addr: localhost:8848 #配置Nacos地址management:endpoints:web:exposure:include: '*'
主启动类
com.atguigu.springcloud.PaymentMain9001
package com.atguigu.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** @Author: Daisen.Z* @Date: 2022/1/13 14:31* @Version: 1.0* @Description:*/
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {public static void main(String[] args) {SpringApplication.run(PaymentMain9001.class,args);}}
编写一个测试接口
package com.atguigu.springcloud.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;/*** @auther zzyy* @create 2020-02-23 14:13*/
@RestController
public class PaymentController
{@Value("${server.port}")private String serverPort;@GetMapping(value = "/payment/nacos/{id}")public String getPayment(@PathVariable("id") Integer id){return "nacos registry, serverPort: "+ serverPort+"\t id"+id;}
}
3. 启动测试
启动nacos注册中心,启动新建的9001模块,访问nacos页面
http://localhost:8848/nacos
访问9001接口测试
http://localhost:9001/payment/nacos/1
4. 创建一个9002模块(方便后面负载均衡测试)
真实开发部署时我们9001和9002是一个集群,除了端口不一样其他的都一样,大家可以参照9001创建出一个9002工程,把端口修改下即可。
这里为了方便测试也为了方便大家学习,我演示一种取巧的方法,这里不得不说一句,IDEA牛逼!
大致的操作就是将9001工程虚copy一份(虚拟的复制一份工程),除了端口不同其他的实际上都还是会找9001。
- 调出Run Dashboard
不会的请移步:https://xiaozhang.blog.csdn.net/article/details/121999966?spm=1001.2014.3001.5502
查看使用Run Dashbord - 右键9001服务,点击Copy Configxxxx
-DServer.port=9002
已经有了
我们把这个9001和9002都启动起来,在查看nacos,会发现已经有两个实例了
查看详情
在访问下9002的接口
http://localhost:9002/payment/nacos/1
OK,没问题了
5. 创建基于Nacos的服务调用者模块
模块名
cloudalibaba-consumer-nacos-order83
pom依赖
<dependencies><!--SpringCloud ailibaba nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --><dependency><groupId>com.atguigu.springcloud</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><!-- SpringBoot整合Web组件 --><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><!--日常通用jar包配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
application.yml
server:port: 83spring:application:name: nacos-order-consumercloud:nacos:discovery:server-addr: localhost:8848#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:nacos-user-service: http://nacos-payment-provider
包名
com.atguigu.springcloud.alibaba
启动类OrderNacosMain83
package com.atguigu.springcloud.alibaba;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** @auther zzyy* @create 2020-02-23 14:44*/
@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83
{public static void main(String[] args){SpringApplication.run(OrderNacosMain83.class,args);}
}
配置RestTemplate
package com.atguigu.springcloud.alibaba.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;/*** @auther zzyy* @create 2020-02-23 14:45*/
@Configuration
public class ApplicationContextConfig
{@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}
6. 编写服务调用业务类
package com.atguigu.springcloud.alibaba.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import javax.annotation.Resource;/*** @auther zzyy* @create 2020-02-23 15:01*/
@RestController
@Slf4j
public class OrderNacosController
{@Resourceprivate RestTemplate restTemplate;// 从配置文件读取微服务调用地址@Value("${service-url.nacos-user-service}")private String serverURL;@GetMapping(value = "/consumer/payment/nacos/{id}")public String paymentInfo(@PathVariable("id") Long id){return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);}
}
7. 启动测试调用
启动nacos、9001、9002及83模块,查看服务nacos控制台
http://localhost:8848/nacos
三个服务都已经注册上来
测试通过83服务调用9001/9002微服务及负载均衡,多刷新几次,发现serverport会在9001和9002之间来回变,这就说明已经支持了负载均衡
http://localhost:83/payment/nacos/1
四、Nacos作为服务注册中心的对比
1. Eureka、Zookeeper、Consul的对比
之前SpringCloud注册中心几篇提到的CAP介绍
C: Consistency(强一致性)
A: Availability(可用性)
P: Partition tolerance(分区容错性)
CAP理论关注粒度是数据,而不是整体系统设计的策略
AP(Eureka):AP架构当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。结论:违背了一致性C的要求,只满足可用性和分区容错,即AP(保障健康的服务,允许心跳停止的服务继续存在)。
CP(Zookeeper/Consul):CP架构当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性结论:违背了可用性A的要求,只满足一致性和分区容错,即CP (保障服务一致,发现心跳停止的服务立即干掉)。
2. Nacos:我都要
C是所有节点在同一时间看到的数据是一致的;而A的定义是所有的请求都会收到响应。
何时选择使用何种模式?
一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如 Spring cloud 和 Dubbo 服务,都适用于AP模式,AP模式为了服务的可用性而减弱了一致性,因此AP模式下只支持注册临时实例。
如果需要在服务级别编辑或者存储配置信息,那么 CP 是必须,K8S服务和DNS服务则适用于CP模式。CP模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。
nacos支持CP和AP模式的切换,想要什么姿势都可以!!!
使用POST请求,以下方式即可完成AP和CP模式的切换。
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
总结
- 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- Nacos: Dynamic Naming and Configuration Service
- Nacos就是注册中心 + 配置中心的组合。
- Nacos = Eureka+Config +Bus。
- 替代Eureka做服务注册中心。
- 替代Config做服务配置中心。
- 据说 Nacos 在阿里巴巴内部有超过 10 万的实例运行,已经过了类似双十一等各种大型流量的考验。
- Nacos做服务注册中心天然支持Ribbon负载均衡。
- Nacos提供了接口支持AP模式和CP模式的切换。
- Nacos挺牛逼。
SpringCloud Alibaba实战--第二篇:NacosⅠ服务注册和配置中心相关推荐
- SpringCloud学习之(十八)SpringCloud Alibaba Nacos服务注册和配置中心
文章目录 (十八)SpringCloud Alibaba Nacos服务注册和配置中心 1.Nacos简介 1.1 为什么叫Nacos 1.2 Nacos是什么 1.3 Nacos能干嘛 1.4 Na ...
- SpringCloud微服务(四)——Nacos服务注册和配置中心
SpringCloud Alibaba Nacos服务注册和配置中心 Spring Cloud Netflix Projects Entering Mainterance Mode SpringClo ...
- SpringCloud Alibaba Nacos服务注册和配置中心-微服务(二十六)
Nacos作为服务注册中心演示 官网文档 基于Nacos的服务提供者 新建Module cloudalibaba-provider-payment9001 POM 父POM <?xml vers ...
- Nacos服务注册和配置中心
简介 Nacos 前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service. Nacos = Eureka+Config +Bus,就是注册中心 + 配置中心的组 ...
- 【SpringCloud】Spring cloud Alibaba Nacos 服务注册与配置中心
文章目录 1.概述 1.1 为什么叫Nacos 1.2 是什么 1.3.地址 1.4 区别 2.运行 3. 服务提供者 4. 服务消费者 5. 扩展 5.1 Nacos支持AP和CP模式的切换 5.1 ...
- Nacos服务注册与配置中心
Nacos简介 由于性能关系,Eureka 停止更新,Hystrix 和 Ribbon 进入维护模式,不再继续更新. 2018.10.31,Spring Cloud Alibaba 正式入驻了Spri ...
- 【SpringCloud】Spring cloud Alibaba Nacos 服务注册与配置中心 命名空间 Data Id
文章目录 1.概述 2.分类配置 2.1 问题1 2.2 问题2 2.3 Namespace +Group+ Data ID三者关系?为什么这么设计? 2.3.1是什么 2.3.2 三 者情况 2.4 ...
- Spring Cloud Alibaba配置实例nacos+sentinel+dubbo实行服务注册、配置中心、熔断限流
通过Spring Cloud Alibaba相关组件nacos+sentinel+dubbo实行服务注册.配置中心.熔断限流等功能 1.本机安装nacos和sentinel-dashboard服务端 ...
- Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本)
文章目录 Spring Cloud入门系列汇总 摘要 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建naco ...
最新文章
- MS:中山大学丁涛/吴忠道-肠道菌群调控血吸虫病传播媒介光滑双脐螺适生性的新机制...
- 白盒测试有哪些方法_QA测试开发常考的面试题+答案汇总(持续更新)
- php异步检测用户名是否已经存在,AJAX实例-检测用户名是否存在
- 工作积累(五)——使用spring@Value注解实现常量功能
- linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程
- 为什么大部分的婚姻都是凑合?数据告诉你真相
- 1.极限——例子_2
- 你所熟知的CI/CD工具都是有哪些?
- linux虚拟机cpu一分钟内负载,虚拟机性能调优-CPU篇
- node_modules中的.cache文件夹的占用空间越来越大
- 爬虫Requests库学习-小猪短租网
- 计算机硬盘怎么看坏了,SSD固态硬盘坏掉怎么看?有哪几种征兆?
- vue生命周期,组件,slot替换,tab切换,简易留言板
- Linux软件手动添加到桌面或启动栏
- VC6 SP6下载地址
- 人穷久了或者累久了会sb
- Redis4.0、5.0、6.0、7.0特性整理(持续更新)
- 负载均衡技术全攻略(大全)
- Stereogram(极射赤面)投影--主要用于中高纬和极区的天气图
- 微信公众号消息增加跳转链接