SpringCloud_v2.0

SpringCloud_v2.0

在这里插入图片描述

Gateway网关

简介:spring官方推出替代Netflix Zuul的网关框架,核心是过滤和路由。通过一系列过滤器将客户端请求转发(路由)到对应的微服务。它也是整个微服务的防火墙和代理器,可以隐藏服务节点的ip端口信息。除此之外,它本身也是一个微服务,要注册到Eureka服务中心。

入门
# 通过网关将包含/user的请求路由到http://127.0.0.1:9091/user/id
# 配置信息(引入依赖eureka-client和gateway)
server:
  port: 10010
spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      routes:
        # 路由id可以任意
        - id: user-service-route
          # (地址写死)uri: http://127.0.0.1:9091
          uri: lb://user-service # 配置动态路由(lb之后的服务名必须要在eureka中注册)
          # 路由断言:可以匹配映射路径
          predicates:
            - Path=/user/**
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
  instance:
    prefer-ip-address: true
路由前缀处理
# 添加前缀:http://127.0.0.1:10010/8  -> http://127.0.0.1:10010/user/8

predicates:
	- Path=/**
filters:
    # 添加请求路径的前缀
    - PrefixPath=/user

# 去除前缀:http://127.0.0.1:10010/api/user/8 -> http://127.0.0.1:10010/user/8
predicates:    
	- Path=/api/user/**
filters:
  # 过滤一个路径
  - StripPrefix=1 #2的话就是两个
自定义全局过滤器
//局部过滤器就先过了

@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("全局过滤器");
        ServerHttpRequest request = exchange.getRequest();
        String token = request.getQueryParams().getFirst("token");
        if(StringUtils.isBlank(token)){
            //设置响应状态码为未授权
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        //值越小越先执行(配置优先级)
        return 0;
    }

}

/*
1.通过postman去测试接口http://127.0.0.1:10010/user/8?token=abc 可以拿到status:200 OK
2.如果测试的是 http://127.0.0.1:10010/user/8?name=lxw  就会拿到status:401 UNAUTHORIZED
*/
Gateway跨域配置

一般而言网关是所有微服务的统一入口,在调用时候会出现跨域问题。(前端js请求访问地址与当前服务器的域名、ip或端口号不一致就是跨域请求。)

spring:
  cloud:
    gateway:
      # 解决跨域问题
      globalcors:
          corsConfigurations:
            '[/**]':
            # allowedOrigins: * (*表示全部)
              allowedOrigins:
                - "http://docs.spring.io"
              allowedMethods:
                - GET

Gateway网关一般是给终端请求使用的,而Feign是在微服务之间调用。


SpringCloud Config

简介:可以修改在git仓库中的配置文件完成其它所有微服务的配置文件的修改。

在这里插入图片描述

搭建配置中心
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!--启动类里面加入注释开启配置服务
    @SpringBootApplication
    @EnableConfigServer
    @EnableDiscoveryClient
-->
server:
  port: 12000

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/lanotherl/lxw-config.git # 配置文件所在的仓库名 如果是私有的就加上gitee的账号密码
          username: ?????
          password: ?????

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
      # 本身也是个服务 要注册到服务中心
读取配置中心里的配置文件

拿一个微服务项目来说,现在可以将原来项目中的application.yml删除,添加一个bootstrap.yml配置文件

在里面写一些项目中固定的配置项,变动的都放在配置中心统一管理

spring:
  cloud:
    config:
      # 要与仓库中的配置文件的application保持一致
      name: user
      # 要与仓库中的配置文件的profile保持一致
      profile: dev
      # 要与仓库中的配置文件所属的版本(分支)一样
      label: master
      discovery:
        # 使用配置中心
        enabled: true
        # 配置中心服务名
        service-id: config-server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

SpringCloud Bus

当git仓库的配置文件更新时,在不重启系统的情况下实现及时同步到各个微服务。

在这里插入图片描述

# config-server的配置文件中(配置中心)
management:
  endpoints:
    web:
      exposure:
        # 暴露触发消息总线的地址
        include: bus-refresh
        
# 配置中心和具体微服务都要配置rabbitmq信息
rabbitmq:
  host: localhost
  port: 5672
  username: guest
  password: guest
  
  
# 在对应控制器controller上还要加上注释@RefreshScope来刷新配置

接着改动git上面的配置文件信息(注意!一定要通过向http://127.0.0.1:12000/actuator/bus-refresh地址发送post请求才能更新配置信息到rabbitmq中,再由rabbitmq发放到各个微服务中 完成配置信息的更新)


SpringCloud 大杂烩综合应用

在这里插入图片描述

总结
  1. 首先,我们开发微服务—比如用户服务、订单服务,并对其做集群部署。
  2. 将服务都注册到Eureka服务注册中心
  3. 服务之间通过Feign相互调用
  4. 各个微服务的配置从SpringCloud Config配置中心获取(配置中心读取Git仓库)
  5. 如果Git仓库的配置文件更新了,又不想要重启服务。就通过SpringCloud Bus、RabbitMQ(用post请求去刷新)更新服务的配置。
  6. PC或者移动端的请求先经过Gateway网关,进行权限鉴定、异常、日志记录,再将请求路由到不同的微服务。由于微服务部署了集群,因此路由过程中会通过Ribbon进行负载均衡,从中选择一个地址去调用。如果服务出现了错误异常,基于Hystrix进行服务降级。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
课程介绍 【完善体系+精品资料】本课程总计115课时,打造全网最全的微服务体系课程;从微服务是什么、能够做什么开始讲起,绝对零基础入门到精通类型。课程整体脉络十分清晰,每个章节一个知识点,画图+源码+运行讲解,不信你学不会。1、课程先讲解了什么是单体架构、什么是微服务架构、他们之间有什么区别和联系,各自有什么优缺点。2、从本质入手,使用最简单的Spring Boot搭建微服务,让你认清微服务是一种思想和解决问题的手段,而不是新兴技术。3、讲解Spring Boot 与 Spring Cloud 微服务架构之间的联系,原生的RestTemplate工具,以及Actuator监控端点的使用。4、带着微服务所带来的各种优缺点,为大家引入服务发现与注册的概念和原理,从而引入我们的第一个注册中心服务Eureka。5、引入负载均衡的理念,区分什么是服务端负载均衡,什么是客户端负载均衡,进而引入Ribbon负载均衡组件的详细使用。6、为了解决微服务之间复杂的调用,降低代码的复杂度,我们引入了Feign声明式客户端,让你几行代码学习服务的远程调用。7、为了解决服务之间的稳定性,避免发生雪崩问题,我们引入了Hystrix断路器,服务降级和熔断机制。8、微服务集群十分庞大,监控起来是十分困难的,尤其是对每一个接口的熔断情况进行监控,因此我们引入了Turbine微服务监控。9、微服务的调用是杂乱无章的,可以网状调用,怎么做到统一的入口出口,统一的授权、加密、解密、日志过滤,我们引入了第一代网关Zuul。10、微服务的配置分散,每次要修改配置都要重启服务,因此我们引入了Config配置中心。11、跟上主流,Consul是当前主流的服务注册与发现、配置中心一体化的解决方案。12、阿里的Nacos服务注册与发现、配置中心在国内炙手可热,Nacos 经历过双十一的微服务中间件。13、Turbin做微服务监控还是太弱,我们需要更强大,可视化,操作性更强的监控系统,因此我引入了Spring Boot Admin体系。14、Zuul已经停止更新支持,Spring Cloud官方推荐的二代网关Spring Cloud Gateway更加强大。15、微服务的安全架构体系虽然复杂,但是是有学习条例的,什么是认证授权、什么是OAuth2.0的原理、 JWT、怎么样去开发实现。 课程资料 【独家资料】1、课程附带全部63个项目源码,其中Hoxton版本项目源码37个,Edgware版本项目26个,2、230页高清PDF正版课件。3、附带nacos、consul、cmder等视频配套软件。学习方法1、每一节课程均有代码,较好的方式为一边听我的讲解,一边使用我提供的项目代码进行观察和运行。2、课程体系庞大,但是并不杂乱,每个章节只针对一个知识点,减轻学习压力。3、坚持每天学习1~2个章节,可以在地铁、公交上用手机学习。【完善知识体系图】

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值