SpringCloud超详细讲解微服务网关Gateway
作者:_时光煮雨 发布时间:2021-09-11 14:54:49
前言
上一篇:微服务网关Zuul
上文中,我们介绍了微服务网关Zuul,Zuul 是 Netflix 公司开源的产品,被称为第一代网关,也是 Spring Cloud 前几个版本默认使用的一款提供动态路由微服务网关组件,但是随着 Netflix 公司一系列的停更事件,在最新的 Spring Cloud Greenwich 版本中已经不建议采用 Zuul 技术,官方建议使用 Spring Cloud Gateway 作为默认的网关技术。 Spring Cloud Gateway作为第二代网关技术,比Zull更强,官方会一直维护更新下去。
所以本文需要再介绍一下Gateway。
微服务网关GateWay介绍
Spring Cloud Gateway 是 Spring 体系内的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。
Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控/指标和限流。
GateWay特性介绍
基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
动态路由
Predicates 和 Filters 作用于特定路由
集成 Hystrix 断路器
集成 Spring Cloud DiscoveryClient
易于编写的 Predicates 和 Filters
限流
路径重写
Gateway 中的相关术语
Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。
Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。
Filter(过滤器):这是
org.springframework.cloud.gateway.filter.GatewayFilter
的实例,我们可以使用它修改请求和响应。
Gateway实战
上文中,我们启动了注册中心registry,dms服务,和app服务,以及zuul服务,本文我们将创建gateway服务以替换zuul:
1、创建项目gateway
创建子模块gateway ,pom.xml引入eureka-client 和gateway 的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、创建启动类
@EnableEurekaClient
@SpringBootApplication
public class GateWayApplication {
public static void main(String[] args) {
SpringApplication.run(GateWayApplication.class, args);
}
}
启动类上增加以及注解。
3、新增配置文件
新增配置文件application.yml
server:
port: 8004
spring:
application:
name: gateway
cloud:
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
routes:
- id: eureka-client-app-1
uri: lb://app
predicates:
- Path=/**
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
spring.cloud.gateway.routes路由参数配置说明:
id:我们自定义的路由 ID。
uri:需要转发的目标服务地址。
predicates:路由条件。
filters:过滤规则,本示例暂时没用。
4、编程方式实现路由
上面路由规则我们也可以使用编程方式来实现,在启动类中增加如下代码,是等效的:
@Configuration
public class GatewayConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
RouteLocatorBuilder.Builder routes = builder.routes();
routes.route("eureka-client-app-1",r -> r.path("/**")
.uri("lb://app"))
.build();
return routes.build();
}
}
5、启动验证
访问Gateway服务的地址:http://localhost:8004/app/index,效果如下:
来源:https://coder965.blog.csdn.net/article/details/125590198
猜你喜欢
- 1.背景Java语言相比于C和C++,一个最大的特点就是不需要程序员自己手动去申请和释放内存,这一切交由JVM来完成。在Java中,运行时的
- 本文实例讲述了Java数组队列概念与用法。分享给大家供大家参考,具体如下:一.队列的概念 (1)队列也是一种线性结构(2)相比数组
- 将索引设置为只读可能听起来很奇怪,但在 Elasticsearch 中执行此类操作是可能的。想象一下这样一种情况,你特别需要限制对索引的写入
- 这篇文章主要介绍了Spring Cache手动清理Redis缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 本篇给大家介绍Spring Boot 与 kotlin 使用Thymeleaf模板引擎渲染web视图。静态资源访问在我们开发Web应用的时候
- java实现数据加密问题,具体代码如下所示:package Array;import java.util.Scanner;/*某个公司采用电
- 这次主要是练习一下Android的自定义view和path的相关使用,所以做了一个简单的demo:自定义一个view,并用path在上面画一
- 本文实例讲述了C#保存listbox中数据到文本文件的方法。分享给大家供大家参考。具体实现方法如下:private void SaveLst
- 一、介绍Spring是通过任务执行器(TaskExecutor)来实现多线程和并发编程,使用Spring提供的ThreadPoolTaskE
- 现在有很多库、实用工具和程序任Java开发人员选择。每个工具都有其优点,但其中有一些因它的知名度、多功能性和有效性从众多选项中脱颖而出。以下
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 本文实例为大家分享了Java通过Fork/Join优化并行计算的具体代码,供大家参考,具体内容如下Java代码:package Thread
- 前言大家都知道网络操作的响应时间是不定的,所有的网络操作都应该放在一个异步操作中处理,而且为了模块解耦,我们希望网络操作由专门的类来处理。所
- 先给大家展示下效果图:1、验证码生成类:import java.util.Random;import java.awt.imag
- 本文实例讲述了Java接口继承和使用接口操作。分享给大家供大家参考,具体如下:一 接口的继承1 点睛接口支持多继承,一个接口可以有多个父接口
- 前言:由于公司的业务,硬生生的把ios开发的我,掰成了android!关于上传文件的需求处理,做了一个Java的简单封装 DocumentM
- 1 编程语言简介编程语言(programming language)可以简单的理解为一种计算机和人都能识别的语言。一种计算机语言让程序员能够
- 装箱是将值类型转换为 object 类型或由此值类型实现的任何接口类型的一个过程。 当 CLR 对值类型进行装箱时,会将该值包装到 Syst
- 前言在【Android】线程间通信 - Handler之使用篇主要讲了 Handler 的创建,发送消息,处理消息 三个步骤。那么接下来,我
- 在 Windows 有一些字符是不能作为文件名,尝试重命名一个文件,输入/ 就可以看到windows 提示的不能作为文件名的字符那么具体是包