系列文章目录

微服务新王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。

  1. 调出Run Dashboard
    不会的请移步:https://xiaozhang.blog.csdn.net/article/details/121999966?spm=1001.2014.3001.5502
    查看使用Run Dashbord
  2. 右键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Ⅰ服务注册和配置中心相关推荐

  1. SpringCloud学习之(十八)SpringCloud Alibaba Nacos服务注册和配置中心

    文章目录 (十八)SpringCloud Alibaba Nacos服务注册和配置中心 1.Nacos简介 1.1 为什么叫Nacos 1.2 Nacos是什么 1.3 Nacos能干嘛 1.4 Na ...

  2. SpringCloud微服务(四)——Nacos服务注册和配置中心

    SpringCloud Alibaba Nacos服务注册和配置中心 Spring Cloud Netflix Projects Entering Mainterance Mode SpringClo ...

  3. SpringCloud Alibaba Nacos服务注册和配置中心-微服务(二十六)

    Nacos作为服务注册中心演示 官网文档 基于Nacos的服务提供者 新建Module cloudalibaba-provider-payment9001 POM 父POM <?xml vers ...

  4. Nacos服务注册和配置中心

    简介 Nacos 前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service. Nacos = Eureka+Config +Bus,就是注册中心 + 配置中心的组 ...

  5. 【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 ...

  6. Nacos服务注册与配置中心

    Nacos简介 由于性能关系,Eureka 停止更新,Hystrix 和 Ribbon 进入维护模式,不再继续更新. 2018.10.31,Spring Cloud Alibaba 正式入驻了Spri ...

  7. 【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 ...

  8. Spring Cloud Alibaba配置实例nacos+sentinel+dubbo实行服务注册、配置中心、熔断限流

    通过Spring Cloud Alibaba相关组件nacos+sentinel+dubbo实行服务注册.配置中心.熔断限流等功能 1.本机安装nacos和sentinel-dashboard服务端 ...

  9. Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建naco ...

最新文章

  1. MS:中山大学丁涛/吴忠道-肠道菌群调控血吸虫病传播媒介光滑双脐螺适生性的新机制...
  2. 白盒测试有哪些方法_QA测试开发常考的面试题+答案汇总(持续更新)
  3. php异步检测用户名是否已经存在,AJAX实例-检测用户名是否存在
  4. 工作积累(五)——使用spring@Value注解实现常量功能
  5. linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程
  6. 为什么大部分的婚姻都是凑合?数据告诉你真相
  7. 1.极限——例子_2
  8. 你所熟知的CI/CD工具都是有哪些?
  9. linux虚拟机cpu一分钟内负载,虚拟机性能调优-CPU篇
  10. node_modules中的.cache文件夹的占用空间越来越大
  11. 爬虫Requests库学习-小猪短租网
  12. 计算机硬盘怎么看坏了,SSD固态硬盘坏掉怎么看?有哪几种征兆?
  13. vue生命周期,组件,slot替换,tab切换,简易留言板
  14. Linux软件手动添加到桌面或启动栏
  15. VC6 SP6下载地址
  16. 人穷久了或者累久了会sb
  17. Redis4.0、5.0、6.0、7.0特性整理(持续更新)
  18. 负载均衡技术全攻略(大全)
  19. Stereogram(极射赤面)投影--主要用于中高纬和极区的天气图
  20. 微信公众号消息增加跳转链接

热门文章

  1. 中秋三天假期,深圳南澳西冲(西涌)海滩游
  2. 供应SG-PEG-DSPE,DSPE-PEG-SG,磷脂-PEG-琥珀酰亚胺戊二酸酯
  3. 微信小程序springboot服装企业人事管理系统
  4. mysql条件查询-查询在某个范围内的数据
  5. State Threads
  6. 安阳7中计算机绘画知识,七年级上册美术知识点汇总
  7. Kali渗透之基于SMB协议收集信息
  8. 2小时07分30秒!尘封逾15年中国马拉松国家纪录被打破 | 美通社头条
  9. 字节跳动埋点数据流建设与治理实践
  10. python的StringIO模块