【Gateway】服务调用和网关配置攻略

>Gatewat是高性能异步网关,统一路由、限流、鉴权,秒级构建微服务入口!

目录

一、OpenFeign

[1.1 入门使用](#1.1 入门使用)

[1.2 最佳实践](#1.2 最佳实践)

二、服务网关

[2.1 入门使用](#2.1 入门使用)

[2.2 过滤器](#2.2 过滤器)

[2.3 跨域问题](#2.3 跨域问题)


一、OpenFeign

1.1 入门使用

1️⃣客户端的依赖引入

复制代码
        <!--feign客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2️⃣启动类添加**@EnableFeignClients**启动注解

3️⃣编写客户端调用代码

1.2 最佳实践

默认的http请求是不支持连接池的,所有我们可以配置上连接池

复制代码
<!--httpClient的依赖 -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

增加下面的配置

复制代码
feign:
  client:
    config:
      default:
        logger-level: BASIC
  httpclient:
    enabled: true
    max-connections: 200
    max-connections-per-route: 50

观察FeignClientFactoryBean类看连接池是否成功

在实际开发中,我们一般采用抽取open为一个单独的模块,使用方通过引入feign-api模块去调用

二、服务网关

2.1 入门使用

基本的流程图

引入基本的依赖

复制代码
<!--网关-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

基本配置和路由规则

复制代码
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: 120.27.236.84:8848,124.221.80.228:8848
      discovery:
        username: nacos
        password: nacos
        namespace: dev
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: # 路由断言,判断请求是否符合规则
            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**

断言工厂

2.2 过滤器

通过配置文件可以为某个服务或全局增加请求头等内容

自定义过滤器

过滤器之间的优先级:默认 > 路由 > 全局

源码查看

2.3 跨域问题

前置知识:https://www.ruanyifeng.com/blog/2016/04/cors.html

增加下面的配置

复制代码
spring:
  cloud:
    gateway:
      globalcors: # 全局的跨域处理
        add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
        corsConfigurations:
          '[/**]':
            allowedOrigins: # 允许哪些网站的跨域请求
              - "*"
            allowedMethods: # 允许的跨域ajax的请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" # 允许在请求中携带的头信息
            allowCredentials: true # 是否允许携带cookie
            maxAge: 360000 # 这次跨域检测的有效期
相关推荐
a程序小傲7 小时前
中国邮政Java面试被问:Kafka的Log Compaction实现和删除策略
java·开发语言·后端·python·面试·职场和发展·kafka
hopsky7 小时前
数据服务开源-SqlRest 1.6 idea中启动 (pg版)
java·ide·intellij-idea
indexsunny7 小时前
互联网大厂Java面试实战:音视频场景中的Spring Boot与Kafka技术问答
java·spring boot·redis·面试·kafka·spring security·互联网大厂
岁岁种桃花儿7 小时前
Spring Boot @GetMapping注解:从应用到原理深度解析
java·spring boot·后端
颜淡慕潇7 小时前
Spring Boot 3.x 升级实战:3.0 → 3.5:为什么升、升什么、以及我们是怎么升的
java·spring boot·后端
韩师学子--小倪15 小时前
fastjson与gson的toString差异
java·json
Drawing stars15 小时前
JAVA后端 前端 大模型应用 学习路线
java·前端·学习
nbsaas-boot15 小时前
SQL Server 存储过程开发规范(公司内部模板)
java·服务器·数据库
行百里er15 小时前
用 ThreadLocal + Deque 打造一个“线程专属的调用栈” —— Spring Insight 的上下文管理术
java·后端·架构
玄〤16 小时前
黑马点评中 VoucherOrderServiceImpl 实现类中的一人一单实现解析(单机部署)
java·数据库·redis·笔记·后端·mybatis·springboot