Spring Cloud AliBaba 开发教程:整合Spring Cloud Gateway

关注程序猿的故事,一块儿用技术改变世界java

Gateway介绍
spring

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于Netty、Reactor以及WEbFlux构建,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。
Spring Cloud Gateway 做为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不只提供统一的路由方式,而且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控、埋点和限流等。
apache

优势

  • 性能强劲,是Zuul的1.6倍编程

  • 功能强大,内置了不少实用的功能,例如转发、监控、限流等bootstrap

  • 设计优雅,容易扩展浏览器

缺点

  • 依赖Netty与WebFlux,不是传统的Servlet编程模型,有必定的学习成本安全

  • 不能在Servlet容器下工做,也不能构建成WAR包,即不能将其部署在Tomcat、Jetty等Servlet容器里,只能打成jar包执行微信

  • 不支持Spring Boot 1.x,需2.0及更高的版本架构

Zuul与Gateway有哪些区别app

  • Zuul网关属于netfix公司开源的产品属于第一代微服务网关

  • Gateway属于SpringCloud自研发的第二代微服务网关

  • 相比来讲SpringCloudGateway性能比Zuul性能要好:

  • 注意:Zuul基于Servlet实现的,阻塞式的Api, 不支持长链接。

Gateway教程

第一步:

搭建测试项目alibaba-nacos-gateway,引入nacos与gateway依赖,pom.xml配置以下:

<?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.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.test</groupId> <artifactId>gateway</artifactId> <version>0.0.1-SNAPSHOT</version> <name>gateway</name> <description>Demo project for Spring Boot</description>
<properties> <java.version>1.8</java.version> <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version> <spring-cloud.version>Greenwich.SR3</spring-cloud.version> </properties>
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </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> <!-- 整合spring-cloud-alibaba--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.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>

第二步:

修改项目启动类,添加注解@EnableDiscoveryClient,可以让注册中心可以发现,扫描到改服务,代码以下:

package com.test.gateway;
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication@EnableDiscoveryClientpublic class GatewayApplication {
public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); }
}

第三步:

修改bootstrap.yml配置文件,配置nacos与gateway服务信息,配置以下:

server: port: 8905spring: application: name: alibaba-nacos-gateway cloud: nacos: discovery: server-addr: 127.0.0.1:8848 namespace: 0df79d5a-2432-4840-a254-e946a943a6c9 gateway: routes: - id: alibaba-nacos-server #使用alibaba-nacos-server提供服务 uri: lb://alibaba-nacos-server #目标服务在注册中心的服务名 predicates: #主要的目的是能够路由到以server开头的全部接口方法 - Path=/server/** #匹配转发路径 filters: - StripPrefix=1 #从第几级开始转发

第四步:

以上就是gateway整合过程,接下来启动alibaba-nacos-gateway与alibaba-nacos-server服务。

第五步:

启动本地nacos服务,mac电脑启动命令:sudo sh startup.sh -m standalone,启动成功后打开浏览器访问nacos服务:http://localhost:8848/nacos,查看服务列表,以下图:

经过页面能够看到两个服务都成功注册。

第六步:

先直接访问alibaba-nacos-server服务,访问地址:http://localhost:8902/test?msg=123456,浏览器显示以下图:

如今能够测试服务网关是否配置生效了,能够经过配置的网关访问alibaba-nacos-server服务提供的接口服务,访问地址:http://localhost:8905/server/test?msg=123456,以下图:

这就是Spring Cloud Gateway的做用之一转发,转发规律:${GATEWAY_URL}/{微服务名}/{请求路径}。


本文分享自微信公众号 - 程序猿的故事(zengxueqi-music)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。