SpringCloud之Gateway实现路由转发

Spring Cloud 系列之 Spring cloud gateway 实现网关路由转发和过滤功能        在Spring boot2.0版本发布之后,spring cloud又集成和开发了很多新的模块和功能;spring boot2.0和spring boot1.5的差别可以说是很大了。今天介绍一些spring cloud gateway,spring cloud自己的网关,在1.x版本中,大家使用的较多的是Zuul网关,但Zuul只是Spring cloud整合Netflix的,并不是... 阅读详情

在访问不同的url时,通过gateway对路径的拦截,按url的区别分配到不同服务器上。

具体实现

首先创建一个父module,eureka-family,同时开启consul

服务提供者

创建子module,eureka-client-hello(其实服务发现工具用的是consul,但命名成eureka了,不过也不重要!)
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 http://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.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.hpsyche</groupId>
	<artifactId>eureka-client-hello</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eureka-client-hello</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-consul-discovery</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>

修改application.yml,如下

server:
  port: 8761
spring:
  application:
    name: consul-server-hello
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        serviceName: server-hello

在启动类添加注解@EnableDiscoveryClient
同时添加controller接口,如下

package com.hpsyche.eurekaclienthello.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Hpsyche
 */
@RestController("/hello")
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
}

同上,创建服务提供者eureka-client-hi
application.yml如下

server:
  port: 8762
spring:
  application:
    name: consul-server-hi
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        serviceName: server-hi

同样在启动类加上@EnableDiscoveryClient注解,同时创建controller

package com.hpsyche.eurekaclienthi.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Hpsyche
 */
@RestController("/hi")
public class HiController {
    @GetMapping("/hi")
    public String hi(){
        return "hi";
    }
}

gateway模块

创建gateway模块,引入gateway starter等,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 http://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.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.hpsyche</groupId>
	<artifactId>gateway-client</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>gateway-client</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-gateway</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-consul-discovery</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>

其application.yml如下所示,

server:
  port: 8750
spring:
  cloud:
    gateway:
      discovery:
        locator:
          lowerCaseServiceId: true
          enabled: true
      routes:
      - id: server-hello
        uri: lb://server-hello
        order: 8000
        predicates:
        - Path=/api/server1/**
        filters:
        - StripPrefix=2
      - id: server-hi
        uri: lb://server-hi
        order: 8001
        predicates:
        - Path=/api/server2/**
        filters:
        - StripPrefix=2
  application:
    name: gateway-client

启动三个服务,访问localhost:8500,如下所示:
忽略马赛克...
访问http://localhost:8750/api/server1/hello
在这里插入图片描述
同样访问http://localhost:8750/api/server2/hi,均能正常访问。
配置成功!

SpringCloud之Gateway网关路由转发route、断言predicates 官方文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/ Controller Service 2、gateway-hi 提供服务 Controller Service 3、gateway-route 网关服务-路由转发 application.yml 通过gateway实现路由转发有两种方式: to_gateway_ha:路由ID,具备全局唯一性,可以不指定,缺省值UUID。 stripPrefix(1) 阅读详情

相关推荐

Spring-Cloud-starter-gateway使用路由转发功能报503

💊最近新建了一个项目,使用gateway网关的时候发现怎么请求都没办法转发到对应的服务,经过一个小时的排除发现由于springcloud2020弃用了Ribbon,因此Alibaba在2021版本nacos中删除了Ribbon的jar包,因此无法通过lb路由到指定微服务,出现了503情况。 以下是我使用的springboot和springcloud版本: 解决: 只需引入loadbalancer依赖即可解决问题🤡...

Small ink的博客 1738

SpringCloud:网关getway 路由转发

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,

weixin_42654295的博客 3711

Spring Cloud Alibaba微服务架构实战教程—15最详细的Gateway统一网关

在分布式微服务架构中,会将服务进行拆分,不同的服务负责各自的业务功能,拆分后也有一个问题?每一个服务都有自己的服务名、ip、端口等,服务越多数量越多时,这样怎么记忆这么多的URL呢?此外,一些公共性的功能(如认证、鉴权、服务流控等)需要重复在各子模块中自身实现,造成的代码冗余怎么办??如图,诞生了一个统一网关,它将所有子服务封装起来,外部请求服务时,由网关统一调配URL和转发各个请求到不同的微服务去,并且可以在网关层针对所有公共性的功能作统一的处理,避免冗余。网关:流量请求的入口。

空空说技术的博客 5万+

Gateway 路由转发

Maven 配置文件: <?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:schemaLocati...

沉在水底的鱼的博客 1841

springcloud学习笔记(六):使用gateway实现路由转发

本文主要介绍如何在springcloud中通过gateway实现路由转发和微服务之间的负载均衡。本例使用的springcloud版本为:2021.0.3,springboot版本为:2.6.8。

sg_knight的专栏 4391

【PADS-开发指南】

馒头破戒大师

sinat_23896491的博客 3225

Spring Cloud Gateway + Nacos 实现路由转发

Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring CloudGateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filer链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等。 步骤: 创建父工.

鹿谷門実的博客 1万+

初识机会网络仿真器ONE中ExternalMovement移动模型(导入外部移动数据)

最近半个月一直在研究ONE中关于ExternalMovement移动模型的源代码,在网上几乎没有找到相关的资料,很是苦恼,如果有共同研究方向的小伙伴欢迎联系我,共同讨论进步。 下面记录一下几点感悟: 1、使用外部数据的前提是在ONE的配置文件中增加及修改相关代码: Group.movementModel = ExternalMovement ExternalMovement.file = move...

qq_36974792的博客 659

实现请求转发_Spring Cloud GateWay 路由转发规则介绍

Spring在因Netflix开源流产事件后,在不断的更换Netflix相关的组件,比如:Eureka、Zuul、Feign、Ribbon等,Zuul的替代产品就是SpringCloud Gateway,这是Spring团队研发的网关组件,可以实现限流、安全认证、支持长连接等新特性。Spring Cloud GatewaySpring Cloud Gateway是SpringCloud的全新子项目...

weixin_36260335的博客 1666

组合导航、惯导、GNSS、INS、IMU的区别

‌:惯性导航系统(INS)是一种利用安装在运载体上的陀螺仪和加速度计来测定运载体位置的系统。它通过测量物体的加速度和角速度,结合算法计算出物体的位置、速度和姿态‌12。‌。

wynn1123的博客 8054

Debian下Rust环境极速安装指南:国内镜像+避坑配置(附清华/中科大源对比)

本文详细介绍了在Debian系统上快速安装和配置Rust开发环境的完整指南。针对国内网络环境,重点对比评测了清华大学、中国科学技术大学等主流镜像源,提供了详细的安装配置步骤、Cargo优化技巧以及常见问题排查方案,帮助开发者显著提升依赖下载和编译效率。

s8t9u0v1w的博客 1162

SpringCloud微服务实战——搭建企业级开发框架(十八):集成Gateway实现微服务路由转发

  在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平 台无关的服务协议作为各个单元间的通讯方式。 ######API 网关的定义 网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。 API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 RE

全栈程序猿的专栏 749

小米路由器安装Misstar tools 和MIXBOX

1.该教程适用于如下路由器: 小米路由器1代硬盘版(R1D) 小米路由器mini(R1CM) 全新小米路由器硬盘版(R2D) 小米路由器3(R3) 小米路由器3G(R3G) 小米路由器Pro(R3P) 小米路由器HD(R3D) 2.Misstar2.0在线安装 方法如下: 1.根据路由器对应文件解压文件,把解压目录(比如小米3路由器为R3)和offline_install.sh到U盘根目录,并插入路由器 2.ssh登录后,cd到U盘的目录,比如小米3路...

wybarcelona的博客 2万+

SpringCloud Gateway+Nacos快速入门

Spring Cloud Gateway 作为微服务架构中的网关,提供了动态路由的功能,可以通过手动配置路由和通过服务发现(如Nacos)自动配置路由两种方式来实现。总的来说,手动路由配置适合对路由规则有精细控制需求的场景,而通过Nacos的自动路由配置则更适合需要高动态性和集中管理的场景。在实际应用中,可以根据具体的业务需求和团队的技术栈来选择适合的路由配置方式。,按照如下页面一步一步进行创建。增加测试controller。验证网关转发请求结果。引入nacos依赖配置。

qq_36070104的博客 1148

Autosar配置——导入DBC后配置SecOC同步报文和同步请求报文

在Autosar中,安全性是一个重要的考虑因素,而SecOC(Secure On-Board Communication)是一种用于保护通信数据完整性和安全性的安全机制。在上述示例中,我们配置了同步报文和同步请求报文的属性。接下来,我们需要在Autosar中配置同步报文和同步请求报文。同步报文用于在通信双方之间同步SecOC状态,而同步请求报文用于请求SecOC的状态信息。通过以上配置,我们成功地导入了DBC文件,并在Autosar系统中配置了SecOC同步报文和同步请求报文。希望以上信息对您有所帮助!

CyberSphinx的博客 649

华为OD机试真题:明日之星选举 (Java/Py/C/ C++/JS/GO)

华为OD机试(机考)双机位C卷 【明日之星选举】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 明日之星选举。

qq_45776114的博客 919

【SpringCloud(6)】Gateway路由网关;zuul路由;gateway实现原理和架构概念;gateway工作流程;静态转发配置

Gateway是在Spring生态系统之上构建的API网关服务,基于Spring5,SpringBoot2和project Reactor等技术 Getway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能,例如:熔断、限流、重试等。 其底层使用了Netty通讯框架

拔高、提升、创新! 1134

数据治理路径之辩:从“先治后用”到“边用边治”,企业如何选择最优路径?

数据治理是企业在数智化建设中的核心挑战,主要涉及三种时序策略:先治理后使用、先用后治理和边用边治。先治理后使用强调在数据应用前建立完整的治理框架,适合高合规要求的行业,但可能响应滞后。先用后治理则优先释放数据价值,适合快速变化的业务环境,但可能累积数据质量问题。边用边治寻求动态平衡,通过持续改进实现治理与应用的同步迭代,适合复杂数据环境。技术选型决策矩阵和实施方法论提供了具体的操作指南,建议根据组织特性和业务需求选择适配方案,并通过渐进式演进路径实现治理与业务的共生演进。

石榴姐yyds 405

【动态路由】系统web url整合系列【springcloud-gateway实现】【不改hosts文件版】组件一:多个Eureka路由过滤器

实现URL web资源整合,实现使用一个web地址访问多个web资源。springcloud gateway4.2.0实现动态路由。一个地址通过gateway反向代理多个web资源 多个eureka地址整合,整合多个nacos地址,整合多个apollo地址,多个apisix地址整合,多个kibana地址整合,多个夜莺地址整合,多个普米url地址整合,多个skywalking地址整合,多个前端系统地址整合 Gateway介绍 Route:路由 Predicate:断言 Filter:过滤器

搬砖工 1281

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Gateway 根据服务名路由失败,报错 Service Unavailable, status=503

记一次路由转发失败的经历 使用gateway+nacos,yaml配置如下,这里使用的是服务名称进行转发: server: port: 10010 spring: application: name: @artifactId@ cloud: nacos: server-addr: 127.0.0.1:8848 # nacos地址 gateway: discovery: locator: enabled: tr

阿杆的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SpringCloud Gateway路由与限流实战指南

API网关作为微服务架构的核心组件,承担着流量调度和系统保护的重要职责。其核心原理是通过路由配置实现请求转发,结合限流算法保障系统稳定性。SpringCloud Gateway基于响应式编程模型,提供了强大的路由匹配规则和过滤器链机制,支持路径、Header、权重等多种路由策略。在技术实现层面,通过Redis令牌桶算法可以实现精确的QPS控制,而Sentinel则提供了更丰富的流控规则和熔断策略。这些技术在电商秒杀、API开放平台等高并发场景中具有重要价值。本文以商品服务和订单系统为例,详细演示了如何配置动

weixin_33806859的博客 356

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

手把手教程SpringCloud gateway 结合nacos实现路由转发

5.补充一下springboot版本需要2.3.12.RELEASE 才可以正常启动。1.使用IDEA创建spring项目,JDK1.8,无需添加依赖。2.添加spring-cloud-gateway和nacos。4.启动网关服务,就可以发现注册到了服务中心。可以访问一下已有服务的接口测试是否转发成功。3.配置properties文件。...

m0_67400973的博客 1583

spring-cloud-kubernetes与SpringCloud Gateway

org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin ${spring-boot.version} repackage org.apache.maven.plugins maven-deploy-plugin ${maven-deploy-plugin.version} true org.apache.maven.p.

java100001的博客 447

(包含配置多个filter和单个id转发多个路径的情况)Spring Cloud GateWay 结合Nacos实现动态路由

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Spring Cloud GateWay 结合Nacos注册中心实现动态路由 一、依赖版本? <spring-cloud.version>Greenwich.SR1</spring-cloud.version> <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version> springboot

qq_42350745的博客 1666

springCloud(20)-GateWay(2)-静态路由-动态路由

1.静态路由 1.1配置实现 1.2bean实现 2.动态路由 通过微服务名称而不是localhost: 1.静态路由 1.1配置实现 1.2bean实现 config.GateWayConfig-RouteLocatorBuilder //当访问地址http://localhost:9527/guonei时,会自动转发到地址 http://news.baidu.com/guonei @Configuration public class GateWayConfig { ...

aggie4628的专栏 675
上一篇: SpringBoot动态切换多数据源
下一篇: poi多线程操作问题(OOM与操作createCell报错ConcurrentModificationException)
Hpsyche
博客等级 码龄9年 1050粉丝 69原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值