• SpringCloud Alibaba实战 -引入服务网关Gateway


    https://www.cnblogs.com/three-fighter/p/14971538.html

    http://javadaily.cn/articles/2020/01/16/1579160378591.html

    SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。

    Spring Cloud Gateway 的目标,不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。

    • Nginx: Nginx由内核和模块组成,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件与客户端请求进行 URL 匹配,用于启动不同的模块去完成相应的工作。
    • Kong: Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求
    • Zuul 是 Netflix 开源的微服务网关组件,它可以和 Eureka、Ribbon、Hystrix 等组件配合使用。社区活跃,融合于 SpringCloud 完整生态,是构建微服务体系前置网关服务的最佳选型之一。
    • Spring Cloud Gateway 是Spring Cloud的一个全新的API网关项目,目的是为了替换掉Zuul1。Gateway可以与Spring Cloud Discovery Client(如Eureka)、Ribbon、Hystrix等组件配合使用,实现路由转发、负载均衡、熔断等功能,并且Gateway还内置了限流过滤器,实现了限流的功能。

    • bootstap.yml:在配置文件里除了应用名称,我们还配置了Nacos的相关配置,不太清楚的同学可以查看上一节。
    复制代码
    ###服务名称(服务注册到nacos名称,如serviceId)
    spring:
    cloud:
    nacos:
    discovery:
    server-addr: http://www.XXXX.com:8848
    namespace: de4a857c-8341-4d3d-a1e0-f2e64eaf8c97
    config:
    server-addr: http://www.XXXXX.com:8848
    file-extension: yaml
    #name: ${spring.application.name}
    prefix: ${spring.application.name} #nacos 配置中心文件前缀
    group: DEFAULT_GROUP
    #变更刷新
    refresh: true
    remote-first: true
    enabled: true
    namespace: de4a857c-8341-4d3d-a1e0-f2e64eaf8c97

     

     

    我们在里面进行了路由转发的配置,也就是routes,我们来看一看这些配置项都是什么意思:

    • id: 路由的唯一标识,用以和其它Route区分
    • uri: 请求要转发到的地址,lb 指的是从nacos中按照名称获取微服务,并遵循负载均衡策略
    • predicates: 路由需要满足的条件,也是个数组(这里是的关系)
    • filters: 过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改

    在这个配置项里,我们定义了user 开头的请求,分发到user-service这个服务。

    接下来我们看看效果吧!

    到此,我们已经引入了Spring Cloud Gateway作为微服务网关,并完成了基本的路由转发的功能。

    除了基本的路由转发,服务网关还可以完成权限校验、限流、API校验等功能,后续我们会继续深入,敬请期待!

     

    server:
    port: 8001

    #开启actuator管理api http://localhost:8080/actuator/gateway/routes
    management:
    endpoints:
    web:
    exposure:
    include: "*"

    ###服务名称(服务注册到nacos名称,如serviceId)
    spring:
    cloud:
    gateway:
    discovery:
    locator:
    # 是否可以通过其他服务的serviceId来转发到具体的服务实例。默认为false
    # 为true,自动创建路由,路由访问方式:http://Gateway_HOST:Gateway_PORT/大写的serviceId/**,
    # 其中微服务应用名默认大写访问
    enabled: true
    #为true表示服务名称(小写)
    lower-case-service-id: true
    routes:
    - id: box-mall-gather
    uri: lb://box-mall-gather
    predicates:
    - Path=/open/mall/**
    filters:
    # 表示截取路径的个数
    - StripPrefix=1
    #- AddRequestHeader=X-Request-Foo, Bar #对请求头部添加X-Request-Foo = Bar 信息
    #- AddRequestParameter=foo, bar #对匹配的请求,会额外添加foo=bar的请求参数
    #- AddResponseHeader=X-Response-Foo, Bar #响应返回时会额外添加X-Response-Foo:Bar的header返回

    - id: box-transaction-service
    uri: lb://box-transaction-service
    predicates:
    - Path=/open/trade/**
    filters:
    # 表示截取路径的个数
    - StripPrefix=1

    - id: box-member-service
    uri: lb://box-member-service
    predicates:
    - Path=/open/member/**
    filters:
    # 表示截取路径的个数
    - StripPrefix=1

    - id: box-marketing-service
    uri: lb://box-marketing-service
    predicates:
    - Path=/open/marketing/**
    filters:
    # 表示截取路径的个数
    - StripPrefix=1

    - id: box-merchants-service
    uri: lb://box-merchants-service
    predicates:
    - Path=/open/merchants/**
    filters:
    # 表示截取路径的个数
    - StripPrefix=1

    - id: box-items-service
    uri: lb://box-items-service
    predicates:
    - Path=/open/items/**
    filters:
    # 表示截取路径的个数
    - StripPrefix=1


    ################### redis start ##########################
    redis:
    database: 1
    host: 47.103.104.148
    port: 6379
    password: life201911
    timeout: 500
    pool:
    # 连接池最大连接数(使用负值表示没有限制
    max-active: 20
    # 连接池最大阻塞等待时间(使用负值表示没有限制
    max-wait: -1
    # 连接池中的最大空闲连接
    max-idle: 8
    # 连接池中的最小空闲连接
    min-idle: 0

    ################### my config start ##########################
    box:
    gateway:
    ###不需要验证白名单
    white:
    List:
    - /member/appAuth/login
    - /member/appAuth/regist
    - /mall/user/initLogin
    - /member/oldBoxLife/getScoreDetailList
    - /member/oldBoxLife/getScoreDetailUsedList
    - /member/oldBoxLife/getMemberScoreRecord
    - /member/oldBoxLife/getMemberScoreRecordUsed
    - /member/oldBoxLife/regist
    - /member/oldBoxLife/login
    - /mall/merchants/brand/list
    - /mall/merchants/market/list
    - /member/oldBoxLife/getBoxsMemberByUid
    - /mall/oldBoxLife/getUserMemberPoint
    - /mall/integral/getIndexGoodsList
    - /mall/integral/getPracticalGoodsList
    - /mall/coupon/getExchangeCouponTypeList
    - /mall/integral/getGoodsDetail
    config:
    ## 测试环境签名调试 生产设置false
    debug: true
    ## 验签公钥
    publicKey: MIGfMA0GCSqGSIb3DQEBAQUA11A4GNADCBiQKBgQC+bjf2zNvnUYdZNciVLleJrZqk2jPpafFth/ock5TwvyEK//JKKLu3nC3CjB0FZiDV6FDpY/T404hPpNhgMT+F/i8PAbsJ11ssCx/YZySA9kKbx0fnvYRQCmx+TMDocId08ZkCZjbIGsc1YibsE2sR+T25p+FkMRpF9wCEh+pvUQIDAQAB
    ## 加签私钥
    privateKey: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL5uN/bM2+dRh1k1yJUuV4mtmqTaM+lp8W2H+hyTlPC/IQr/8koou7ecLcKMHQVmINXoUOlj9PjTiE+k2GAxP4X+Lw8BuwnXWywLH9hnJID2QpvHR+e9hFAKbH5MwOhwh3TxmQJmNsgaxzViJuwTaxH5Pbmn4WQxGkX3AISH6m9RAgMBAAECgYAe4ndXIrCDmrht4ogukb6GyM4s8Gq8737Feek5m0HrrcPpKcuc9XBEfiL5y4mlZ114PpzWzZ/WkstfoEmMKzDymzBL03HfA+fFu8oQYkE4634I4vQEa75lVIuaiccWpLvZukqkUFBd80cUeb086zM5H72ex3iJYuNBv+1Lhl/AkQsQJBAPCdeQ6/NtkVV7tC9xFjIyfZZmed48uSOHqMxW0sdl0WNjpiwbO7oLTHdQnyLmF8x4u0cZDCUNloJWglnq1pEq0CQQDKm0ukoFbFquP5FwTkS60o8ffTRdE+lHKtWI3t2DFvGc9Gt98VRb/xBEbZe1uvvBAxRI5SL1Bd+irAusyyw4e1AkAfrkxDMdAR8ypzAJUxV+FIHOrL19Ene6AuGpzgDAulpAgN1fT1Kk41n1F8tsN+mIRZk6+kRMGKbpkGRnXHFV+dAkBSAsp7uOtm1+WvzkGMp5VQHaHTQ0+PpUdGI7JPtFNORYRBe+wxECrBxJlpLyXN3LIxPy7c1YoSgFEN8o8pTTyBAkEA2YvOI2/04tRApZdPFrCqOq5AWefk12znDVrWayKk9BKHhVrqNnJvvNLC99j3N/7wfSVRTShRnm75Bs/OXuBatw==

    小蚊子大人
  • 相关阅读:
    Android Studio在android Emulator中运行的项目黑屏
    【.NET开发福音】使用Visual Studio将JSON格式数据自动转化为对应的类
    ASP.NET Core获取请求完整的Url
    解决Cannot find module '@angular/compiler-cli'
    必备三件套:xshell6+xftp6+navicat
    关于bertTokenizer
    关于warm up(transformers.get_linear_schedule_with_warmup)
    一文弄懂pytorch搭建网络流程+多分类评价指标
    python实现多分类评价指标
    如何使用flask将模型部署为服务
  • 原文地址:https://www.cnblogs.com/ywsheng/p/14971994.html
Copyright © 2020-2023  润新知