SpringCloud——网关2

请添加图片描述
个人名片:

博主酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志三人行,必有我师焉。

请添加图片描述
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

三、路由断言工厂

Spring提供了11种基本的Predicate工厂:

名称说明示例
After是某个时间点后的请求- After=2037-01-20T17:42:47.789-07:00[America/Denver]
Before是某个时间点之前的请求- Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai]
Between是某两个时间点之前的请求- Between=2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver]
Cookie请求必须包含某些cookie- Cookie=chocolate, ch.p
Header请求必须包含某些header- Header=X-Request-Id, \d+
Host请求必须是访问某个host(域名)- Host=.somehost.org,.anotherhost.org
Method请求方式必须是指定方式- Method=GET,POST
Path请求路径必须符合指定规则- Path=/red/{segment},/blue/**
Query请求参数必须包含指定参数- Query=name, Jack或者- Query=name
RemoteAddr请求者的ip必须是指定范围- RemoteAddr=192.168.1.1/24
Weight权重处理

在上面快速入门的学习中,我们只使用到了Path。
了解

  • lPath=/user/**是什么含义?

路径是以/user开头的就认为是符合的

  • lPredicateFactory的作用是什么?

读取用户定义的断言条件,对请求做出判断

四、路由过滤器

Spring提供了31种不同的路由过滤器工厂。例如:

名称说明
AddRequestHeader给当前请求添加一个请求头
RemoveRequestHeader移除请求中的一个请求头
AddResponseHeader给响应结果中添加一个响应头
RemoveResponseHeader从响应结果中移除有一个响应头
RequestRateLimiter限制请求的流量

1.案例:给所有进入userservice的请求添加一个请求头

1.添加过滤器配置(application.yml)
注意审题,发现需要在userservice下加入过滤器。

server:
  port: 10010 # 网关端口
spring:
  application:
    name: gateway # 服务名称
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
    gateway:
      routes:
        - id: user-service # 路由ID,自定义,只要唯一即可
         # uri: http://127.0.0.1:8081 # 路由的目标地址 http 就是固定地址
          uri: lb://userservice # 路有目标 lb为开启负载均衡,userservice为服务名称
          predicates: # 路由断言,判断请求是否符合路由规则
            - Path=/user/** # 路由规则 以user开头即可
          filters: # 过滤器
            - AddRequestHeader=come on, The future is uncertain. We are both dark horses. # 添加请求头
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**

2.修改UserController
目的:使控制台可以查看到我们添加的请求头

@GetMapping("/{id}")
public User queryById(@PathVariable("id") Long id,
                      @RequestHeader(value ="Truth", required = false) String truth) {
    log.info("Truth:{}", truth);
    return userService.queryById(id);
}

3.测试
访问路径:http://localhost:10010/user/1
image.png

2.默认过滤器

作用:①对所有路由都生效的过滤器

server:
  port: 10010 # 网关端口
spring:
  application:
    name: gateway # 服务名称
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
    gateway:
      routes:
        - id: user-service # 路由ID,自定义,只要唯一即可
          uri: lb://userservice # 路有目标 lb为开启负载均衡,userservice为服务名称
          predicates: # 路由断言,判断请求是否符合路由规则
            - Path=/user/** # 路由规则 以user开头即可
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**
      default-filters:
        - AddRequestHeader=Truth,Itcast is freaking awesome! # 添加请求头

对比
filters在routes下一级
默认过滤器(default-filters)与routes同级

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值