首页 > 其他分享 >Springcloud之Gateway入门

Springcloud之Gateway入门

时间:2023-02-01 10:03:50浏览次数:54  
标签:网关 服务 入门 Springcloud nacos provider Path consumer Gateway


API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:

  1. 破坏了服务无状态特点。
    为了保证对外服务的安全性,我们需要实现对服务访问的权限控制,而开放服务的权限控制机制将会贯穿并污染整个开放服务的业务逻辑,这会带来的最直接问题是,破坏了服务集群中REST API无状态的特点。
    从具体开发和测试的角度来说,在工作中除了要考虑实际的业务逻辑之外,还需要额外考虑对接口访问的控制处理。
  2. 无法直接复用既有接口。
    当我们需要对一个即有的集群内访问接口,实现外部服务访问时,我们不得不通过在原有接口上增加校验逻辑,或增加一个代理调用来实现权限控制,无法直接复用原有的接口。
    以上这些问题可以借助 API 网关解决。API 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 API 网关这一层。也就是说,API 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由 API 网关来做,这样既提高业务灵活性又不缺安全性,典型的架构图如图所示:

1、快速开始
1.1 、引入依赖
pom.xml中的依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

1.2 、编写路由规则
为了演示路由到不同服务,这里把消费者和生产者都配置在网关中

application.yml
server:
port: 8090
spring:
cloud:
gateway:
routes:
- id: nacos-consumer
uri: http://127.0.0.1:8080
predicates:
- Path=/hi
- id: nacos-provider
uri: http://127.0.0.1:8070
predicates:
- Path=/hello

1.3 、启动测试

通过网关路径访问消费者或者生产者。

Springcloud之Gateway入门_网关

在开发中由于所有微服务的访问都要经过网关,为了区分不同的微服务,通常会在路径前加上一个标识,例如:
访问服务提供方:http://localhost:8090/provider/hello ;
访问服务消费方:http://localhost:8090/consumer/hi
如果不重写地址,直接转发的话,转发后的路径为:http://localhost:8070/provider/hello和http://localhost:8080/consumer/hi明显多了一个provider或者consumer,导致转发失败。
这时,我们就用上了路径重写,配置如下:

server:
port: 8090
spring:
cloud:
gateway:
routes:
- id: nacos-consumer
uri: http://127.0.0.1:8080
predicates:
- Path=/consumer/**
filters:
- RewritePath=/consumer/(?<segment>.*),/$\{segment}
- id: nacos-provider
uri: http://127.0.0.1:8070
predicates:
- Path=/provider/**
filters:
- RewritePath=/provider/(?<segment>.*),/$\{segment}

注意:Path=/consumer/**及Path=/provider/**的变化

测试:

Springcloud之Gateway入门_gateway_02

2、面向服务的路由

Springcloud之Gateway入门_gateway_03

如果要做到负载均衡,则必须把网关工程注册到nacos注册中心,然后通过服务名访问。
2.1 、把网关服务注册到nacos

@SpringBootApplication
@EnableDiscoveryClient
public class GatewayDemoApplication {

public static void main(String[] args) {
SpringApplication.run(GatewayDemoApplication.class, args);
}
}

2.2 、修改配置,通过服务名路由

server:
port: 8090
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:
- id: nacos-consumer
uri: lb://nacos-consumer
predicates:
- Path=/consumer/**
filters:
- RewritePath=/consumer/(?<segment>.*),/$\{segment}
- id: nacos-provider
uri: lb://nacos-provider
predicates:
- Path=/provider/**
filters:
- RewritePath=/provider/(?<segment>.*),/$\{segment}

语法:lb://服务名

lb:LoadBalance,代表负载均衡的方式

服务名取决于nacos的服务列表中的服务名

Springcloud之Gateway入门_gateway_04


标签:网关,服务,入门,Springcloud,nacos,provider,Path,consumer,Gateway
From: https://blog.51cto.com/u_14389461/6030677

相关文章

  • Springcloud和dubbo的区别
    随着近几年微服务的兴起,最近大家对springcloud和dubbo的讨论越来越多,那么下面我们简单来看看这两者使用中的不同有哪些,以下观点仅供参考。1、架构完整度(见上图)或许很多人......
  • Nacos入门
    1、介绍①概要官网:home(nacos.io)Nacos:DynamicNamingandConfigurationService(动态命名和配置服务)你可以看为:Eureka(注册中心)+Config(配置中心)+Bus(消息总线)Nacos......
  • 大数据实时多维OLAP分析数据库Apache Druid入门分享-上
    @目录概述定义MPP和Lambda补充说明概述特征适用场景不适用场景横向对比部署单机部署入门示例概述定义ApacheDruid官网地址https://druid.apache.org/ApacheDruid......
  • drf从入门到精通02
    昨日回顾#1web应用开发模式 -前后端混合:bbs项目,图书管理---->模板语法--->后端通过模板语法把模板【xx.html】-前后端分离:后端,不需要写前端,只需要提供接口......
  • Java快速入门
    初学者快速学习Java1-介绍2- 创建Java工程3- 原始数据类型4- 变量5-控制流程5.1- if-else语句5.2- 一般操作符5.3-布尔值5.4- switch-case-defau......
  • Solidity极简入门#5. 变量数据存储和作用域
    Solidity中的引用类型引用类型(ReferenceType):包括数组(array),结构体(struct)和映射(mapping),这类变量占空间大,赋值时候直接传递地址(类似指针)。由于这类变量比较复杂,占用存储空间......
  • Elasticsearch 从入门到实践 小册笔记
    MappingJSON中是可以嵌套对象的,保存对象类型可以用object类型,但实际上在ES中会将原JSON文档扁平化存储的。假如作者字段是一个对象,那么可以表示为:{"author":{......
  • drf入门规范——restful规范,序列化反序列化,django原生接口与drf接口案例
    restful规范(重要)概念REST全称是RepresentationalStateTransfer,中文意思是表述(编者注:通常译为表征性状态转移)。它首次出现在2000年RoyFielding的博士论文中。RESTful......
  • Unicorn快速入门
    看James给的SPIR-V看麻了,转过来快速入门一下unicorn。早该学学了。官网:https://www.unicorn-engine.org/(搞完这个继续看SPIR-V(确信))简介与安装Unicorn是一个基于QEMU的......
  • Spring Cloud Gateway context-path与注册中心名称一致转发失效问题
    实验环境<spring.cloud-version>2021.0.5</spring.cloud-version><spring.cloud.alibaba-version>2021.1</spring.cloud.alibaba-version>内容中心#应用名称spring:appli......