本文主要是介绍<七>spring-cloud Hoxton.SR2 网关组件gateway搭建使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
<七>spring-cloud Hoxton.SR2 网关组件gateway搭建使用
文章目录
- <七>spring-cloud Hoxton.SR2 网关组件gateway搭建使用
- 1、gateway简介
- 1.1、简介
- 1.2、词汇表
- 1.3、工作原理
- 1.4、详细参考
- 2、项目搭建
- 2.1、搭建新的项目`badger-spring-cloud-gateway`,pom文件如下
- 2.2、主启动类,加eureka的注解`@EnableEurekaClient`
- 2.3、yaml的配置文件
- 3、项目启动,测试使用
- 3.1、启动步骤
- 3.2、测试
- 3、负载均衡调用服务提供者badger-spring-cloud-api
- 3.1、负载均衡调用的问题
- 3.2、新的yml配置
- 3.3、再测试;
本地项目的基础环境
环境 | 版本 |
---|---|
jdk | 1.8.0_201 |
maven | 3.6.0 |
Spring-boot | 2.2.4.RELEASE |
Spring-cloud | Hoxton.SR2 |
本次例子是基于上一次构建的badger-spring-cloud-api
项目的基础上,使用的;
《<一>spring-cloud Hoxton.SR2版 服务注册与发现–eureka搭建以及集群搭建》
《<二>spring-cloud Hoxton.SR2 负载均衡ribbon搭建使用》
《<三>spring-cloud Hoxton.SR2 负载均衡openfeign搭建使用》
《<四>spring-cloud Hoxton.SR2 断路器hystrix搭建使用》
《<五>spring-cloud Hoxton.SR2 hystrix Dashboard监控搭建使用》
《<六>spring-cloud Hoxton.SR2 网关组件zuul搭建使用》
具体代码信息,可以查看《码云》
1、gateway简介
1.1、简介
gateway是在spring生态系统之上构建的API网关服务,基于spring5、spring-boot 2和Project Reactor等技术。
Springcloud gateway 的目标提供统一的路由方式基于Filter链的方式提供网关基本的功能,例如:安全、监控\指标,限流;
springcloud gateway具有如下特性:
-
基于spring framework 5 ,Project Reactor 和spring boot 2.0 进行构建;
-
动态路由:能够匹配任何请求属性;
-
可以对路由指定Predicate(断言)和Filter(过滤器);
-
集成Hystrix的断路器功能;
-
集成spring-cloud服务发现功能;
-
易于编写的Predicate(断言)和Filter(过滤器);
-
请求限流功能;
-
支持路径重写;
1.2、词汇表
路由:路由网关的基本构建块。它由ID,目标URI,谓词集合和过滤器集合定义。如果聚合谓词为true,则匹配路由。
谓词:这是 Java 8 Function谓词。输入类型为 Spring Framework ServerWebExchange。这使开发人员可以匹配HTTP请求中的任何内容,例如标头或参数。
过滤器:这些是使用特定工厂构造的实例 Spring Framework GatewayFilter。在此,可以在发送下游请求之前或之后修改请求和响应。
1.3、工作原理
客户端向Spring Cloud网关发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序。该处理程序运行通过特定于请求的筛选器链发送请求。筛选器由虚线分隔的原因是,筛选器可以在发送代理请求之前或之后执行逻辑。执行所有“前置”过滤器逻辑,然后发出代理请求。发出代理请求后,将执行“后”过滤器逻辑。
1.4、详细参考
《spring-cloud中文网》
《spring-cloud-gateway官网简介》
《spring-cloud-gateway官网文档》
2、项目搭建
2.1、搭建新的项目badger-spring-cloud-gateway
,pom文件如下
主要是新增注册中心eureka的包spring-cloud-starter-netflix-eureka-client
,网关gateway的包spring-cloud-starter-netflix-gateway
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.8.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><groupId>com.badger</groupId><artifactId>badger-spring-cloud-gateway</artifactId><version>0.0.1-SNAPSHOT</version><name>badger-spring-cloud-gateway</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><maven-jar-plugin.version>3.1.1</maven-jar-plugin.version><spring-cloud.version>Hoxton.SR2</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
2.2、主启动类,加eureka的注解@EnableEurekaClient
@SpringBootApplication
@EnableEurekaClient
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}}
2.3、yaml的配置文件
server:port: 9000
eureka:client:serviceUrl:defaultZone: http://127.0.0.1:8761/eureka/instance:instance-id: ${spring.cloud.client.ip-address}:${server.port}prefer-ip-address: true
spring:application:name: badger-spring-cloud-gatewaycloud:gateway:routes:- id: badger-api1 #路由的id,主要是为了区分微服务的业务而命名的uri: http://localhost:7001 #转发的服务的地址predicates:- Path=/demo/** #断言的规则,目前设置的根据请求路径(path)来判断- id: csdnuri: https://blog.csdn.netpredicates:- Path=/qq*/**
更多关于gateway的属性配置,可以查看org.springframework.cloud.gateway.config.GatewayProperties.class
配置类;
关于predicates
断言的更多配置,可以参考《spring-cloud中文网》
也可以查看spring的官网,对于spring-cloud-gateway的文档;
https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/
也可以使用代码形式对转发路由进行配置,spring-cloud-gateway的文档中,也可以看到
https://spring.io/projects/spring-cloud-gateway#overview
3、项目启动,测试使用
3.1、启动步骤
- 启动eureka的服务,端口8761;
- 修改yaml的配置文件,启动端口为7001,启动服务的提供者badger-spring-cloud-api;
- 启动服务的消费者badger-spring-cloud-gateway,端口为9000;
3.2、测试
当前网关转发的路由有两个:
1、一个转发本地的 服务的提供者badger-spring-cloud-api;访问http://localhost:7001/demo的结果
访问地址 http://localhost:9000/demo
可以看到如下图结果,网关转发成功了;
2、转发路由中,另外一个配置了csdn
博客主页的地址;
访问地址http://localhost:9000/qq_28410283
如下图所示:网关也转发成功了;
3、负载均衡调用服务提供者badger-spring-cloud-api
3.1、负载均衡调用的问题
上述的测试只是转发了单个地址的请求,如果服务的提供者badger-spring-cloud-api应用,部署了多个,并且注册到同一个注册中心中,根据具体地址转发的配置,不能调用使用负载均衡的形式调用badger-spring-cloud-api应用的;
3.2、新的yml配置
server:port: 9000
eureka:client:serviceUrl:defaultZone: http://127.0.0.1:8761/eureka/instance:instance-id: ${spring.cloud.client.ip-address}:${server.port}prefer-ip-address: true
spring:application:name: badger-spring-cloud-gatewaycloud:gateway:discovery:locator:enabled: true #开启从注册中心获取转发的服务路由,默认为falseroutes:- id: badger-api #路由的id,主要是为了区分微服务的业务而命名的uri: lb://badger-spring-cloud-api #转发的服务的地址predicates:- Path=/demo/** #断言的规则,目前设置的根据请求路径(path)来判断
主要是开启了spring.cloud.gateway.discovery.locator.enabled
属性为true;
然后把routes
的url属性配置成lb://'+serviceId'
的形式;
具体可以参看配置类org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties.class
3.3、再测试;
启动服务的提供者badger-spring-cloud-api;启动端口为7000;
启动服务的提供者badger-spring-cloud-api;启动端口为7001;
启动服务的消费者badger-spring-cloud-gateway,端口为9000;
再次调用地址http://localhost:9000/demo就可以发现,两个端口,轮训调用了;
我的地址是-->172.16.2.54:7001
我的地址是-->172.16.2.54:7000
具体代码信息,可以查看《码云》
这篇关于<七>spring-cloud Hoxton.SR2 网关组件gateway搭建使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!