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进行服务降级。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值