文章目录

  • Spring Cloud Alibaba——微服务开发
    • Spring Cloud Alibaba是什么?
      •  主要功能
      •  组件
    • 为什么不使用Spring Cloud
    • 使用 Nacos Discovery Starter 完成微服务应用的服务注册与发现
      •  组件版本关系
      •  声明版本
      •  引入依赖
      •  配置地址
      •  开启服务
      •  启动Nacos
    • 使用SpringCloud-OpenFeign远程调用服务
      •  引入依赖
      •  编写接口
      •  开启调用
      •  使用服务
      •  测试调用
      •  调用过程
    • 使用 Nacos Config Starter 完成微服务应用的服务注册与发现
      •  引入依赖
      •  配置地址
      •  发布配置
      •  注入配置
      •  读取配置
    • Nacos概念
    • Nacos和zookeeper
    • Nacos原理
      • 心跳机制
      • Nacos服务注册发现步骤
      • 负载均衡

Spring Cloud Alibaba——微服务开发

Spring Cloud Alibaba是什么?

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

 主要功能

  服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
  分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
  消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
  分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。
  阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
  阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

 组件

  Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  Dubbo:ApacheDubbo™ 是一款高性能 Java RPC 框架。
  Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
  Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。
  Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
  Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

学习 程序猿DD-翟永超-Spring Cloud Alibaba基础教程

为什么不使用Spring Cloud

因为需要考虑Eureka 宣布闭源的问题。然而官方说的是 Eureka 2.0 的开源工作已经停止,依赖于开源库里面的 Eureka 2.x 分支构建的项目或者相关代码,风险自负!Spring Cloud 还是在 1.x 上面开发的,但有必要考虑到这一点所以可以使用Spring Cloud Alibaba

The existing open source work on eureka 2.0 is discontinued. The code base and artifacts that were released as part of the existing repository of work on the 2.x branch is considered use at your own risk.
Eureka 1.x is a core part of Netflix’s service discovery system and is still an active project.

使用 Nacos Discovery Starter 完成微服务应用的服务注册与发现

 组件版本关系

 声明版本

  1、在 公共项目dependencyManagement 中添加如下配置

<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.0.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

 引入依赖

  2、然后在 dependencies 中添加依赖,引入 Nacos Discovery Starter

    <!--        服务注册/发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

 配置地址

  3、其次,修改各个服务的/src/main/resources/application.yml配置文件中配置 Nacos Server 地址

 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

 开启服务

  4、然后在SpringBoot启动类添加@EnableDiscoveryClient 注解开启服务注册与发现功能

 启动Nacos

  5、最后启动 Nacos Server,首先需要获取 Nacos Server,支持直接下载和源码构建两种方式。
  直接下载:Nacos Server 下载页
  源码构建:进入 Nacos Github 项目页面,将代码 git clone 到本地自行编译打包。
  下载完后,运行启动 Server,进入解压后文件夹或编译打包好的文件夹,找到如下相对文件夹 nacos/bin,并对照操作系统实际情况之下如下命令。

Linux/Unix/Mac 操作系统,执行命令 sh startup.sh -m standalone
Windows 操作系统,执行命令 cmd startup.cmd

  6、Nacos Server 启动后,则可以启动项目,然后进入Nacos监控页面,则可以查看服务节点已经成功注册到 Nacos Server

http://127.0.0.1:8848/nacos
用户名和密码默认都为nacos

Nacos文档

使用SpringCloud-OpenFeign远程调用服务

 引入依赖

1.创建项目时引入依赖(谁需要调用服务则需要引入依赖)

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

 编写接口

2.编写一个接口,告诉SpringCloud这个接口需要调用远程服务

@FeignClient("指定需要调用服务名")
public interface TestFeignService {@RequestMapping("需要调用远程服务的controller方法全路径")//方法名和返回值,参数需要和远程调用方法一致public R testFeignMethod();}

 开启调用

3.在项目启动类添加注解

@EnableFeignClients("这里写上面创建接口的全包名")

 使用服务

4.调用远程服务

@RestController
@RequestMapping("member/member")
public class MemberController {@Autowiredprivate TestFeignService testFeignService;@RequestMapping("/test")public R test() {MemberEntity memberEntity = new MemberEntity();memberEntity.setNickname("张三");R memberCoupons = testFeignService.testFeignMethod();return R.ok().put("member", memberEntity).put("coupons", memberCoupons.get("coupons"));}}

 测试调用

5.接下来就可以启动项目测试输入http://localhost:8000/member/member/test 成功页面

 调用过程

   调用过程:会先根据@EnableFeignClients注解指定的接口的全包名找到接口,然后通过@FeignClient注解指定的需要调用服务名找到服务(调用者和被调用者都需要注册到Nacos中),在根据方法名和指定的方法全路径找到远程服务方法进行调用。

使用 Nacos Config Starter 完成微服务应用的服务注册与发现

 引入依赖

1、在公共项目pom.xml文件中添加依赖

 <!--        配置中心来做配置管理--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

 配置地址

2、在应用的 /src/main/resources/bootstrap.properties 配置文件中配置 Nacos Config 元数据

 spring.application.name=服务名spring.cloud.nacos.config.server-addr=127.0.0.1:8848

SpringBoot中有以下两种配置文件bootstrap (.yml 或者 .properties),application (.yml 或者 .properties)

1、加载顺序上的区别: 在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是application, bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于applicaton。bootstrap主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。
2、应用场景:bootstrap.yml 和application.yml 都可以用来配置参数。 bootstrap配置文件可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。 application 配置文件可以用来定义应用级别的,主要用于 Spring Boot 项目的自动化配置。bootstrap 配置文件有以下几个应用场景:使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息,一些固定的不能被覆盖的属性,一些加密/解密的场景。

 发布配置

3、完成上述两步后,使用的 Nacos自带控制台发布配置

dataId和group在项目启动日志控制台中可以找到:
例:Loading nacos data, dataId:‘gulimall-coupon.properties’, group: 'DEFAULT_GROUP

修改group需要在配置文件中添加spring.cloud.nacos.config.group=MY_GROUP
注:该配置必须放在 bootstrap.properties 文件中

还可以在命令行中发布配置:

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos-config-example.properties&group=DEFAULT_GROUP&content=user.id=1%0Auser.name=james%0Auser.age=17"

 注入配置

3、发布成功配置后启动应用会从 Nacos Config 中获取相应的配置,并添加在 Spring EnvironmentPropertySources 中。使用 @Value 注解来将对应的配置注入到 SampleControlleruserNameage 字段,并添加@RefreshScope 打开动态刷新功能

 @RefreshScopeclass SampleController {@Value("${user.name}")String userName;@Value("${user.age}")int age;@RequestMapping("/testNacosConfig")public R testNacosConfig(){return R.ok().put("userName",userName).put("age",age);}}

 读取配置

4、启动项目打开自定义路径可以看到读取到之前配置的属性值

{
"msg": "success",
"code": 0,
"userName": "DAIHAO",
"age": 18
}

修改配置则只需要在Nacos Cofig中修改配置重新发布即可,@RefreshScope注解会动态刷新读取配置中心的配置

Nacos概念

1、命名空间:配置隔离;

  • 默认:public(保留空间);默认新增的所有配置都在public空间。
  • 1)、开发,测试,生产:利用命名空间来做环境隔离。
    注意:在bootstrap.properties;配置上,需要使用哪个命名空间下的配置
    spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871
  • 2)、每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置

2、配置集:即所有的配置的集合。一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

3、配置集ID:Nacos 中的某个配置集的 ID( Data ID)。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

4、配置分组:默认所有的配置集都属于:DEFAULT_GROUP;
    项目中的使用:每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod

5、同时加载多个配置集

  • 1)、微服务任何配置信息,任何配置文件都可以放在配置中心中
  • 2)、只需要在bootstrap.properties说明加载配置中心中哪些配置文件即可
  • 3)、在这里插入图片描述以前SpringBoot任何方法从配置文件中获取值,都能使用。配置中心有的优先使用配置中心中的

将配置集拆分开
可分别配置在开发环境下不同服务的配置
数据源配置
mybatis配置
在bootstrap.properties配置文件中配置要读取的配置

还有一些概念有可以官方文档查看Nacos文档

Nacos和zookeeper

特性 zookeeper nacos
一致性协议 CP CP + AP
健康检查 Keep Alive tcp/http/mysql/client beat
负载均衡 权重/selector/metadata
多数据中心 不支持 支持
跨注册中心同步 不支持 支持
雪崩保护
访问协议 tcp http/dns
k8s集成 不支持 支持
dubbo集成 支持 支持

Nacos原理

心跳机制

每5秒对心跳请求ip地址更新心跳时间,有个定时任务每5s会检查是不是太久没心跳,如果没心跳就下线掉这个实例

怎么发起的心跳请求:nacos定时向所有的nacos服务中心服务器发送心跳

Nacos服务注册发现步骤

1、服务提供者将注册信息写入到Nacos注册中心的服务注册表中

2、服务注册中心将服务提供者的实例交给Service Holder(服务持有容器)处理,服务实例将会挂载在Service Holder的空间下

3、服务注册成功后,提供者将与服务中心维持心跳,未能及时发送心跳的服务将会被剔除

4、服务发现支持两种场景

消费者可以直接向注册中心发送获取某个服务实例的请求,这种情况下注册中心将返回所有可用的服务实例给消费者,但是一般不推荐这种情况。

服务的消费者向注册中心订阅某个服务,并提交一个监听器,当注册中心中服务发生变更时,监听器会收到通知,这时消费者更新本地的服务实例列表,以保证所有的服务均是可用的。

负载均衡

负载均衡有很多中实现方式,包括轮询法,随机方法法,对请求ip做hash后取模等等,从负载的维度考虑又分为:服务端负载均衡和客户端负载均衡。

Nacos 的客户端在获取到服务的完整实例列表后,会在客户端进行负载均衡算法来获取一个可用的实例,模式使用的是随机获取的方式。

谷粒商城微服务分布式基础篇二—— Spring Cloud Alibaba、Nacos注册与发现相关推荐

  1. 谷粒商城微服务分布式高级篇ElasticSearch二——重要概念及原理

    文章目录 面向文档 索引 分布式特性 分布式集群 集群健康 添加索引 增加故障转移 横向扩展 继续扩展 应对故障 数据结构 什么是文档? 文档元数据 _index _type _id 其他元数据 _s ...

  2. 谷粒商城微服务分布式高级篇ElasticSearch三——Dcoker安装ES及ES检索语法

    文章目录 Docker安装ES&kibban Elasticsearch安装 kibban安装 IK分词器安装 Nginx安装 检索 1.查看es中有哪些索引 2.增加一个索引(库) 3.删除 ...

  3. golang微服务框架对比_微服务里程碑,Golang与Spring Cloud Alibaba完美结合

    目前微服务架构仍是软件架构中最新的热门话题,虽然Golang是一门新的语言,但Golang的性能比python和java高出不少.既能承受程序使用运行的服务构建的繁重负载,又容易与GitHub集成,管 ...

  4. 谷粒商城 - 微服务分布式电商项目

    谷粒商城 1.项目背景 谷粒商城项目是尚硅谷研究院最新推出的完整大型分布式架构电商平台,技术全面.业务深入,全网无出其右.技术涵盖:微服务架构 + 分布式 + 全栈 + 集群 + 部署 + 自动化运维 ...

  5. 微服务为什么一定要选spring cloud?

    作者:董添 李秉谦 || 网易乐得技术团队 来自:http://tech.lede.com/ 现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性.同时,支持微服务的技术栈 ...

  6. 微服务为什么离不开spring cloud?

    转载自  微服务为什么离不开spring cloud? 现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性.同时,支持微服务的技术栈也是多种多样的,本系列文章主要介绍这些 ...

  7. 一个简单的微服务项目带你上手spring cloud 全家桶

    最近一个月,断断续续学习了spring cloud的主流微服务模块,然后实践了一个比较容易上手的微服务项目,现在做一个总结. 这个项目是在github上的一个比较经典的spring cloud易上手的 ...

  8. 微服务配置中心实战:Spring + MyBatis + Druid + Nacos

    转载自  微服务配置中心实战:Spring + MyBatis + Druid + Nacos 很多基于 Spring MVC 框架的 Web 开发中,Spring + MyBatis + Druid ...

  9. Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 11.1 Spring Cloud Alibaba Nacos 概述

    11.1 Spring Cloud Alibaba Nacos 概述 11.1.1 Spring Cloud Alibaba 简介 在一开始,我们先简单介绍下Spring Cloud Alibaba的 ...

最新文章

  1. ASP.NET 例程完全代码版(3)——随意创建图形信息
  2. Macbook pro 2016/2017 接入扩展坞时断 WIFI 问题的解决办法
  3. 常用汉字的unicode 编码
  4. 只学python能找工作吗-只学Python能找到工作吗?老男孩Python视频教程
  5. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系
  6. POI实现Excel导入Cannot get a text value from a numeric cell
  7. python格式字符串的参数不足_格式字符串的参数不足
  8. sysbench测试mysql性能(TPS、QPS、IOPS)(重要)
  9. Navigation Drawer介绍
  10. c++矩阵转置_lt;读书笔记4gt; 稀疏矩阵基础算法
  11. X光扫描揭示芯片密码卡入侵手段
  12. 【SpringCloud】Spring cloud Alibaba Sentinel 服务降级 (阿里版本Hystrix)
  13. matlab求半径范围内的点,matlab怎么快速搜索距离某点球形范围内的所有点
  14. 解决nginx端口占用问题
  15. Python 进阶——重访 list
  16. Debugview调试视图
  17. 蓝桥杯_算法训练_未名湖畔的烦恼
  18. asp.net高校宿舍后勤管理系统
  19. 机器学习--digits手写字体
  20. Go语言实战-golang操作redis

热门文章

  1. kinova-Mico安装与调试
  2. OpenFlow Tutorial
  3. 汽车天线系统结构、原理及应用指南
  4. 网络设备配置与管理,校园网规划
  5. Python调用使用自颁发证书的https接口
  6. 微信公众平台接口测试帐号申请流程
  7. 如何优雅的使用DbContext
  8. HDU 5148 Cities (树形DP)*
  9. Linux系统操作MySql常用命令
  10. ~ 按位取反运算解析