SpringCloud 框架基本模块梳理(一)
前言
本片文章作为本系列的初始,将会搭建 注册中心 和 网关 共两个服务,同时会从个人来阐述技术选型,欢迎讨论,轻喷。
一、环境&组件版本介绍
JDK 8, MAVEN 3, idea编译器
SpringBoot: 2.2.5.RELEASE
SpringCloud: Hoxton.SR3
二、搭建注册中心
1、技术选型
一提到分布式系统注册中心的技术选型,就会有人跟我提一下CAP(Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性))理论,然后会告诉我三者当中只能满足两种情况 要么CA要么CP,至于为啥,通常都是听的一知半解,我就不对这个理论发表什么看法了,毕竟年轻。
由于我接触的少,备选的方案不多,主要有:Zookeeper, Eureka, Consul(本系列会选取eureka和consul来搭建环境)关于3种技术的阐述,此处就简单聊聊,有兴趣问度娘。
Zookeeper: 主节点依赖,通信异常的时候可能会导致服务长时间不可用,在集群环境下的表现异常强大(这是个人感觉)且区分角色,通常分3种,集群数以3的倍数为佳
Eureka: 只要自身服务没问题,注册进来的服务挂不挂并不影响其他服务。
Consul: 只知道是大佬们的东西,目前没有过接触。
2、基本流程
本篇文章以eureka为注册中心,因为此时consul还在下载。
Idea创建一个干净的SpringCloud工程
整理一下项目结构
pom文件,版本对应一下文章。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<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>
创建一个module,命名为eureka,
引入spring-cloud-starter-netflix-eureka-server依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
启动项添加注解@EnableEurekaServer来表名身份
配置一下yml文件,没有就新建
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
default-zone: http://${eureka.instance.hostname}:${server.port}/eureka/
healthcheck:
enabled: true
server:
enable-self-preservation: true
截至目前,注册中心搭建完毕,可以启动访问一下。
3、效果展示
[eureka截图]
三、搭建网关
1、技术选型
关于网关,备选的有zuul和gateway (还是了解的少了)此处我选择gateway,毕竟5.0了,也是要往前走走的。值得提一下的是,在Hoxton.SR3下,gateway有一个断言的特性(不知道之前的版本有没有)同时增加 RetryFilter, RouteDefinition, 以及支持低于 1 req/s 条件限流。
2、基本流程
再一次创建一个module, 命名为gateway,引入依赖(此处是重点,不要随便引入其他jar)
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
配置yml文件
server:
port: 8888
spring:
profiles:
active: path-route #使用哪个配置文件
application:
name: gateway #服务名
cloud:
#设置路由规则
gateway:
discovery:
locator:
enabled: true
routes:
- id: apiuser
# lb代表从注册中心获取服务
uri: lb://provide
predicates:
# 以P开头的请求都将转发到uri设置的路由
- Path=/p/**
filters:
- StripPrefix=1
这里着重介绍一下gateway的相关配置
discovery.locator.enabled : true
开启服务注册,配置可替代启动项@EnableEurekaClient
routes-id 唯一的路由规则标识
routes.uri 跳转的服务地址 1p://服务名 -> 可以从注册中心匹配服务
routes.predicates-Path 断言规则— eg: - Path=/p/** 表示以P开头的请求都将转发到uri设置的路由
截至目前,网关gateway搭建完毕,可以启动访问一下。
3、效果展示
为了验证网关, 我这边创建了一个简单的服务,输出 Hello World。
直接访问服务
网关访问服务
四、本篇结束