【微服务】Day06(csmall项目网关、Elasticsearch 概述)

本文介绍了SpringGateway的动态路由配置、内置断言和过滤器的使用,展示了如何实现动态路由以减少配置维护工作量。同时,探讨了Elasticsearch的基本概念、下载与启动,以及其作为全文搜索引擎在提升模糊查询效率上的优势。文中还提到了Elasticsearch的索引原理和分词插件IK的使用,并简单展示了如何操作ES数据。
摘要由CSDN通过智能技术生成

昨天晚课git地址

https://gitee.com/jtzhanghl/home2205.git

续SpringGateway网关

网关路由配置

上次课完成了路由的基本配置

下面对当前项目所有服务器添加路由配置信息

server:
  port: 9000
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        # 网关也是微服务项目的一部分,所以也要注册到Nacos
        server-addr: localhost:8848
    gateway:
      # routes就是路由的意思,在此处配置是一个数组类型
      routes:
        - id: gateway-shanghai
          uri: lb://shanghai
          predicates: 
            - Path=/sh/**
        # 数组类型中编写 "-"开头,表示是一个数组元素
        # id表示当前路由的名称,没有和其他任何出现过的名字关联,和之后的内容也没有关联
        - id: gateway-beijing
          # 当前路由配置的路由目标配置,也就是路由路径
          # lb是LoadBalance的缩写,beijing是路由目标服务器的名称
          uri: lb://beijing
          # 下面编写路由条件\规则,也就是满足什么样的路径会访问beijing服务器
          # 我们要配置内置断言来配置路径路径   predicates(断言)
          predicates:
            # 断言其实就是满足某个条件时做什么操作的设置
            # predicates和routes类似,也是一个数组类型
            # ↓  P大写!!!!!  表示以/bj/开头的请求都会路由到beijing服务器
            - Path=/bj/**
# spring.cloud.gateway.routes[0].uri
# spring.cloud.gateway.routes[0].predicates[0]

上面的yml配置了bejing和shanghai项目的路由信息

先启动Nacos

然后启动每个模块(beijing/shanghai/gateway)

我们使用

http://localhost:9000/bj/show可以访问beijing服务器的资源

http://localhost:9000/sh/show可以访问shanghai服务器的资源

以此类推,再有很多服务器时,我们都可以仅使用9000端口号来将请求路由到正确的服务器

就实现了gateway成为项目的统一入口的效果

动态路由

网关项目随着微服务数量的增多

gateway项目的yml文件配置会越来越多,维护的工作量也会越来越大

所以我们希望gateway能够设计一套默认情况下自动路由到每个模块的路由规则

这样的话,不管当前项目有多少个路由目标,都不需要维护yml文件了

这就是我们SpringGateway的动态路由功能

配置文件中开启即可

server:
  port: 9000
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        # 网关也是微服务项目的一部分,所以也要注册到Nacos
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          # 这就是开启动态路由的配置,动态路由配置默认是关闭的,需要手动开启才能生效
          # 动态路由生成规则为:在网关端口号后先写要路由到的目标服务器在nacos注册的名称
          # 再编写具体路径
          # 例如 localhost:9001/bj/show   ->  localhost:9000/beijing/bj/show
          enabled: true

按上面修改完配置之后

我们可以重启gateway来测试动态路由路径是否生效

动态路由生成规则为:在网关端口号后先写要路由到的目标服务器在nacos注册的名称,再编写具体路径

内置断言

我们上次课在网关配置中使用了predicates(断言)的配置

断言的意思就是判断某个条件是否满足

我们之前使用了Path断言,判断请求的路径是不是满足条件,例如是不是/sh/** /bj/**

如果路径满足这个条件,就路由到指定的服务器

但是Path实际上只是SpringGateway提供的多种内置断言中的一种

还有很多其它断言

  • after
  • before
  • between
  • cookie
  • header
  • host
  • method
  • path
  • query
  • remoteaddr

时间相关

after,before,between

判断当前时间在指定时间之前,之后或之间的操作

如果条件满足可以执行路由操作,否则拒绝访问

表示时间的格式比较特殊,先使用下面代码获得时间

ZonedDateTime.now()

运行程序输出,可获得当前时间,这个时间的格式可能是

2022-09-27T10:19:46.898+08:00[Asia/Shanghai]

下面在yml配置中添加新的断言配置

使用After设置必须在指定时间之后访问

routes:
  - id: gateway-shanghai
    uri: lb://shanghai
    predicates:
      - Path=/sh/**
      # 当前断言是两个条件,第一是路径必须用/sh/开头
      # 第二是访问的时间必须在下面指定的时间之后, 而且两个条件必须同时满足,才能路由
      - After=2022-09-27T10:29:00.898+08:00[Asia/Shanghai]

必须在指定时间之后才能访问服务

否则发生404错误拒绝访问

需要注意测试时,先启动Nacos,再启动shanghai之后启动gateway

测试时必须通过9000端口访问才能有效果

使用Before设置必须在指定时间之前访问

routes:
  - id: gateway-shanghai
    uri: lb://shanghai
    predicates:
      - Path=/sh/**
      # 当前断言是两个条件,第一是路径必须用/sh/开头
      # 第二是访问的时间必须在下面指定的时间之后, 而且两个条件必须同时满足,才能路由
      - Before=2022-09-27T10:31:30.898+08:00[Asia/Shanghai]

使用Between设置必须在指定时间之间访问

routes:
  - id: gateway-shanghai
    uri: lb://shanghai
    predicates:
      - Path=/sh/**
      # 当前断言是两个条件,第一是路径必须用/sh/开头
      # 第二是访问的时间必须在下面指定的时间之后, 而且两个条件必须同时满足,才能路由
      - Between=2022-09-27T10:33:20.898+08:00[Asia/Shanghai],2022-09-27T10:33:40.898+08:00[Asia/Shanghai]

要求指定参数的请求

Query断言,判断是否包含指定的参数名称,包含参数名称才能通过路由

routes:
  - id: gateway-shanghai
    uri: lb://shanghai
    predicates:
      - Path=/sh/**
      # 判断是否包含指定参数名称(username)的断言,不包含就不能正常路由
      - Query=username

内置过滤器

Gateway还提供的内置过滤器

不要和我们学习的filter混淆

内置过滤器允许我们在路由请求到目标资源的同时,对这个请求进行一些加工或处理

常见过滤器也有一些

我们给大家演示一下AddRequestParameter过滤器

它的作用是在请求中添加参数和它对应的值

routes:
  - id: gateway-shanghai
    uri: lb://shanghai
    filters:
      # 内置过滤器功能,AddRequestParameter在路由到指定控制器方法之前
      # 在请求中添加参数age=18,控制器方法运行时可以通过age获取该值
      - AddRequestParameter=age,18
    predicates:
      - Path=/sh/**
      # 判断是否包含指定参数名称(username)的断言,不包含就不能正常路由
      - Query=username

在shanghai的控制器方法中添加代码接收name,age的值

@RestController
@RequestMapping("/sh")
public class ShanghaiController {
   

    @GetMapping("/show")
    public String show(String username,Integer age){
   
        System.out.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值