SpringCloud 框架基本模块梳理(一)

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。
两个服务
直接访问服务
直接访问
网关访问服务
网关访问

四、本篇结束

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值