-
微服务
定义:基于单个应用围绕业务进行拆分,拆分出来每一个服务项目 单独部署 运行在自己计算机进程里面 基于分布式服务管理 -
spring cloud 工具集
定义:用来帮助开发人员快速构建一家分布式应用 微服务工具集(服务注册 发现 负载均衡 路由组件 统一配置管理) -
环境搭建
首先搭建父工程,先建立一个空白工程,然后建立一个maven的工程模块。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baizhi</groupId>
<artifactId>springcloud_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--继承springboot的父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<!-- 自定义属性-->
<properties>
<spring.cloud-version>Hoxton.SR6</spring.cloud-version>
</properties>
<!--维护版本 springcloud版本-->
<dependencyManagement>
<dependencies>
<!--维护springcloud版本依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
以上代码是父工程的pom文件内容。
-
服务注册中心
服务注册中心就是在整个微服务架构中单独提出来的一个服务,这个服务不完成系统的任务业务功能,仅仅用来完成对整个微服务系统的服务注册和服务发现,以及对服务健康状态的监控和管理功能。 -
常用的注册中心
springcloud支持多种注册中心,Eureka、Consul、Zookeeper、以及阿里巴巴推出的Nacos。这些注册中心在本质上都是用来管理服务的注册和发现以及服务状态检查的。 -
Eureka
简化:Eureka是Netflix开发的服务发现框架 springcloud-netflix-eureka 服务注册中心
Eureka包含了 两个组件:Eureka Server和Eureka Client -
开发Eureka注册中心
springcloud开发一般记住三点:引依赖,写配置,加注解。
a.创建springboot项目
b.引入eureka server依赖
<!--引入eureka server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
c.编写配置文件 指定eureka server端口 服务地址
#eureka默认配置为8761,因此在配置端口的时候,可以直接使用默认的
server.port=8761
#eureka server服务注册中心地址 暴露服务地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
d.在入口类加入注解
@SpringBootApplication
@EnableEurekaServer //开启当前应用是一个服务注册中心
- 注意:在编写eureka服务端微服务模块的时候,开启服务时会出现报错,这个时候是因为eurekaserver在运行的时候默认会把客户端开启,把自己作为一个客服端向自己注册,然后报错。我们需要包eurekaserver的默认开启客户端给关闭了,就可以解决问题。
#关闭eureka client立即注册
eureka.client.fetch-registry=false
#让当前的应用仅仅是服务注册中心
eureka.client.register-with-eureka=false
- Eureka client开发
1.开发eureka clirent 就是日后基于业务拆分出来一个一个微服务
2.创建完成springboot应用
3.在创建的项目中引入eureka client相关依赖
<dependencies>
<!--引入springboot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
4.编写配置application.properties
#指定服务端口
server.port=8989
#指定服务名称
spring.application.name=eurekaclient
#指定服务注册中心
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
5.在入口类加入注解
@SpringBootApplication
@EnableEurekaClient //让当前的微服务作为一个eureka server客户端 进行服务注册
-
eureka自我保护机制
eureka自我保护机制默认是开启的,如果eureka server在一定的时间内(默认90秒)没有接收到某个微服务实例的心跳,eureka server将会移除该实例。但是当网络分区故障发生时,微服务与eureka server之间无法正常通信,而微服务本身是正常运行的,此时不应该移除这个微服务,所以引入了自我保护机制。eureka server在运行期间会统计心跳失败比例在15分钟内是否低于85%。如果低于85%,eureka server会将这些实例保护起来,让这些实例不会过期。这种设计的哲学原理就是“宁可信其有,不可信其无”。自我保护模式是一种针对网络异常波动的安全措施,使用自我保护模式能使eureka集群更加地健壮、稳定地运行。 -
springcloud alibaba
·alibaba团队开源微服务工具集帮助我们快速构建分布式系统(微服务系统)提供alibaba解决方案
特性:
a.Flow control and service degradation 服务流量控制 和 服务降级(熔断) ===> Sentinel 替换springcloud原有的Hystrix组件
b.Service registration and discovery 服务注册和发现组件 ====> Nacos 替换springcloud consul和eureka组件
c.Distributed Configuration 统一配置中心组件 ====> Nacos 替换springcloud config组件
d.Event-driven 事件驱动利用MQ RocketMQ =====》 事件驱动 替换Bus组件实现消息总线
e.Message Bus 消息总线(异步处理)
f.Distributed Transaction 分布式事物
g.Dubbo RPC 集成Dubbo实现服务间的通信 -
微服务项目实战开发 Springcloud NetFlix + SpringCloud srping + SpringCloud alibaba
1.服务注册中心 ====> Nacos
2.服务间通信负载均衡 ====> HttpRest a.RestTemplate+Ribbon b.Openfeign
3.服务流控和服务降级 ===> Sentinel
4.服务网关组件 ===> Gateway
5.统一配置中心 ===> Nacos -
springcloudalibaba微服务项目开发
父项目依赖
<!--继承springboot父项目-->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.2.5.RELEASE</version>
</parent>
<!--版本维护-->
<properties>
<spring.cloud.version>Hoxton.SR6</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
</properties>
<!--维护依赖-->
<dependencyManagement>
<dependencies>
<!--springcloud依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springcloudalibaba依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
-
nacos组件使用
nacos安装,这个访问官网,然后按步骤下载安装包,在liunx系统中安装。
nacos启动,默认是以集群模式进行启动的,必须满足多个节点。
单机启动: 必须在nacos的bin目录下进行./startup.sh -m standalone
查看日志:tail -f logs/nacos.log
访问nacosweb地址:http://192.168.111.128:8848/nacos
可以看到,访问后需要登录操作。注意默认的用户名和密码都是nacos
注意:nacos和eureka不同,这边服务器端通过命令开启后,项目就不需要再建立服务端微服务项目了。直接写client,然后开启服务注册就可以了。 -
nacos微服务注册
1.创建独立springboot应用
2.引入nacosclient依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入nacos客户端依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
3.写配置,配置application.properties
server.port=8989
spring.application.name=nacosclient
#nacos server
spring.cloud.nacos.server-addr=192.168.111.128
4.添加注解,在启动类添加注解
@SpringBootApplication
@EnableDiscoveryClient //开启服务注册 nacos客户端
- 统一配置中心nacos
1.dataId细节:代表完整配置文件名称 ===> spring.cloud.nacos.config.name
完整配置文件名称 = prefix(前缀) + env(环境) + file-extension(后缀)
2.微服务拉去配置
a.第一次获取配置方式
#从这个组中拉去那个配置文件
spring.cloud.nacos.config.name=configclient-prod
#拉取这个配置那个后缀的配置文件
spring.cloud.nacos.config.file-extension=properties
b.第二种获取配置文件方式: dataId= orefix + env + file-extension
spring.cloud.nacos.config.prefix=configclient
spring.profiles.active=prod
spring.cloud.nacos.config.file-extension=properties
3.统一配置中心 nacos 三个重要概念
命名空间:namespace 默认nacos安装完成以后会有一个默认命名空间,这个命名空间名字为public
作用:站在项目中角度隔离每一个项目配置文件
组:group 默认nacos在管理配置文件时不显示执行group名称 默认的组名称为 DEFAULT_GROUP
作用:站在项目中每个服务角度,隔离同一个项目中不同服务的配置
文件名:dataId 获取一个配置文件的唯一标识。