当前位置: 首页 > news >正文

SpringCloud+Nacos+Gateway

SpringCloud+Nacos+Gateway

    • SpringBoot整合Gateway+Nacos
      • 一. 环境准备
        • 1. 版本环境
        • 2. 服务环境
      • 二. 实战
        • 1.创建用户服务
        • 2.创建订单服务
        • 3.创建网关服务
        • 4.测试
      • 三. 避坑指南
        • 问题1--503问题
        • 问题2--网关服务启动报错


SpringBoot整合Gateway+Nacos

本篇文章只演示通过gateway网关服务访问其他服务,不对gateway的其他功能做演示

一. 环境准备

1. 版本环境

  • Jdk: <java.version>1.8</java.version>
  • SpringBoot: <version>2.4.2</version>
  • SpringCloud: <spring.cloud.version>2020.0.1</spring.cloud.version>
  • SpringCloudAlibaba: <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>

以下是项目中pom配置,可拿来直接使用

1. 独立订单/用户服务pom文件

<?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.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.scg</groupId><artifactId>spring-cloud-order-center</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-cloud-order-center</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring.cloud.version>2020.0.1</spring.cloud.version><spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version></properties><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><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><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2. 独立网关服务pom文件

<?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.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.scg</groupId><artifactId>spring-cloud-nacos</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-cloud-gateway</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring.cloud.version>2020.0.1</spring.cloud.version><spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version></properties><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><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><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--得不加上这个配置,不然会报503--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

2. 服务环境

本节使用一个简单的案例来演示Spring Cloud Gateway的使用方法,首先我们准备三个SpringBoo应用:

  • spring-cloud-user-center : 独立用户服务
  • spring-cloud-order-center : 独立订单服务
  • spring-cloud-gateway: 独立的网关服务

二. 实战

1.创建用户服务

  1. 引入相关依赖
        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
  1. yml配置
server:port: 8085spring:application:name: spring-cloud-user-centercloud:nacos:discovery:server-addr: 127.0.0.1:8848ip: 127.0.0.1
management:endpoints:web:exposure:include: "*"
  1. 编写测试类
/*** @author gf* @date 2023/2/14*/
@Slf4j
@RestController
public class UserController {@RequestMapping("/user")public String user(){log.info("hello Mr gateway,this is user server");return "hello Mr gateway,this is user server";}
}

由于我们要将服务注册倒注册中心,所以我们在以内nacos依赖后要在启动类上添加@EnableDiscoveryClient注解

@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudUserCenterApplication {public static void main(String[] args) {SpringApplication.run(SpringCloudUserCenterApplication.class, args);}}

2.创建订单服务

创建订单服务和创建用户服务的过程一直,我们可以在测试类上做些改变以区分后面的调用
订单服务测试类

@Slf4j
@RestController
public class OrderController {@RequestMapping("/order")public String getOrder(){log.info("hello Mr gateway,this is order server");return "hello Mr gateway,this is order server";}
}

3.创建网关服务

  1. 引入相关依赖
<?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.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.scg</groupId><artifactId>spring-cloud-nacos</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-cloud-gateway</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring.cloud.version>2020.0.1</spring.cloud.version><spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version></properties><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><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><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--得不加上这个配置,不然会报503--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
  1. 配置yml文件
server:port: 8082
spring:application:name: gateway_servercloud:nacos:discovery:server-addr: 127.0.0.1:8848gateway:discovery:locator:#开启从注册中心动态创建路由的功能,利用微服务名进行路由enabled: true#开启小写验证,默认feign根据服务名查找都是用的全大写lowerCaseServiceId: trueroutes:- id: spring-cloud-order-centeruri: lb://spring-cloud-order-center# 断言,路径相匹配的进行路由predicates:- Path=/order-center/**filters:- StripPrefix=1- id: spring-cloud-user-centeruri: lb://spring-cloud-user-center# 断言,路径相匹配的进行路由predicates:- Path=/user-center/**filters:- StripPrefix=1
management:endpoints:web:exposure:include: "*"`3. 启动类添加@EnableDiscoveryClient注解```java
@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudGatewayApplication {public static void main(String[] args) {SpringApplication.run(SpringCloudGatewayApplication.class, args);}}

4.测试

同时启动三台服务,我们可以看到这三者服役已经注册到了nacos注册中心中

在这里插入图片描述

按照我们的配置,访问http://localhost:8082/user-center/user会调用用户中心的的user接口,访问http://localhost:8082/order-center/order会调用订单中心的order接口,接下来我们测试一下
在这里插入图片描述

通过网关访用户服务
在这里插入图片描述

通过网关访订单服务
在这里插入图片描述

三. 避坑指南

问题1–503问题

在这里插入图片描述
解决办法:添加如下依赖

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

问题原因:
参考:gateway 503 问题

问题2–网关服务启动报错

***************************
APPLICATION FAILED TO START
***************************Description:Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' that could not be found.Action:Consider defining a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' in your configuration.Process finished with exit code 1

问题原因:

这是由于所依赖的模块中有 spring-boot-starter-web 的依赖,而 SpringCloudGateway 还不支持 spring-boot-starter-web

解决方案:

网关服务去掉spring-boot-starter-web依赖

  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

相关文章:

SpringCloud+Nacos+Gateway

SpringCloudNacosGatewaySpringBoot整合GatewayNacos一. 环境准备1. 版本环境2. 服务环境二. 实战1.创建用户服务2.创建订单服务3.创建网关服务4.测试三. 避坑指南问题1--503问题问题2--网关服务启动报错SpringBoot整合GatewayNacos 本篇文章只演示通过gateway网关服务访问其他…...

高通开发系列 - linux kernel内核升级msm-3.18升至msm-4.9(2)

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 返回高通开发系列 - 总目录 前面我们升级了msm-4.9内核系统正常启动了,文件系统也正常工作,但那是使用了老基线的文件系统,其yocto…...

Spring依赖注入与反转控制到底是个啥?

目录 1. 引言 2. 管中窥豹 3.1 Spring 依赖注入 3.2 Bean 的依赖注入方式有两种 4. 总结 1. 引言 此文目的是用通俗易懂的语言讲清楚什么是依赖注入与反转控制&#xff0c;在看了大量的博客文章后归纳总结&#xff0c;便于后续巩固&#xff01;我相信&#xff0c;大多数…...

Linux Shell脚本讲解

目录 Shell脚本基础 Shell脚本组成 Shell脚本工作方式 编写简单的Shell脚本 Shell脚本参数 Shell脚本接收参数 Shell脚本判断用户参数 文件测试与逻辑测试语句 整数测试比较语句 字符串比较语句 Shell流程控制 if条件判断语句 单分支 双分支 多分支 for循环语句…...

Linux:用户空间非法指针coredump简析

1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 背景 本文分析基于 ARM32 架构&#xff0c;Linux-4.14 内核代码。 3. 问题分析 3.1 测试范例 void main(void) {*(int *)0 8; }运行程序会 …...

带你玩转Jetson之Deepstream简明教程(四)DeepstreamApp如何使用以及用于工程验证。

1.DeepstreamApp是什么&#xff1f; 如果你安装完毕deepstream整体框架&#xff0c;会在你的系统执行目录内有可执行文件&#xff0c;文件名字是deepstream-app。这是一个可执行脚本文件&#xff0c;通过deepstream框架中的代码在安装的时候编译后install到系统根目录内。 此脚…...

快速搭建个人在线书库,随时随地畅享阅读!

前边我们利用NAS部署了个人的导航页、小说站、云笔记&#xff0c;今天&#xff0c;我们再看看怎么部署一个个人的在线书库。 相信很多朋友都在自己的电脑中收藏了大量的PDF、MOBI等格式的电子书籍&#xff0c;但是一旦换了一台设备&#xff0c;要么是无法翻阅&#xff0c;要么…...

电子纸墨水屏的现实应用场景

电子纸挺好个东西&#xff0c;大家都把注意力集中在商超场景 其实还有更多有趣的场景方案可用&#xff0c;价值也不小&#xff0c;比如&#xff1a; 一、仓库场景 通过亮灯拣选&#xff0c;提高仓库作业效率 二、仓库循环使用标签 做NFC类发卡式应用&#xff0c;替代传统纸…...

常量const、引用、指针的大杂烩

文章目录1 普通引用1.1 对普通值的普通引用1.2 对常量值的普通引用1.3 对普通指针的普通引用1.4 对常量指针的普通引用1.5 对指针常量的普通引用1.6 对指向常量的指针常量的普通引用2 常量引用2.1 对普通值的常量引用2.2 对常量值的常量引用2.3 对普通指针的常量引用2.4 对常量…...

宝塔搭建实战php开源likeadmin通用管理移动端uniapp源码(四)

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 上一期给大家分享了pc端的部署方式&#xff0c;今天来给大家分享uniapp端在本地搭建&#xff0c;与打包发布到宝塔的方法。感兴趣的朋友可以自行下载学习。 技术架构 vscode node16 vue3 uniapp vite types…...

Hive的分区表与分桶表内部表外部表

文章目录1 Hive分区表1.1 Hive分区表的概念&#xff1f;1.1.1 分区表注意事项1.2 分区表物理存储结构1.3 分区表使用场景1.4 静态分区表是什么&#xff1f;1.4.1 静态分区表案例1.4.2 分区表练习一1.4.3 分区操作1.5 动态分区表是什么&#xff1f;1.5.1 动态态分区表案例&#…...

和数集团打造《神念无界:源起山海》,诠释链游领域创新与责任

首先&#xff0c;根据网上资料显示&#xff0c;一部《传奇》&#xff0c;二十年热血依旧。 《传奇》所缔造的成绩&#xff0c;承载的是多少人的青春回忆&#xff0c;《传奇》无疑已经在游戏史上写下了浓墨重彩的一笔。 相比《传奇》及背后的研发运营公司娱美德名声大噪&#x…...

小白入门模拟IC设计,如何快速学习?

众所周知&#xff0c;模拟电路很难学。以最普遍的晶体管来说&#xff0c;我们分析它的时候必须首先分析直流偏置&#xff0c;其次在分析交流输出电压。可以说&#xff0c;确定工作点就是一项相当麻烦的工作&#xff08;实际中来说&#xff09;&#xff0c;晶体管的参数多、参数…...

51单片机——中断系统之外部中断实验,小白讲解,相互学习

中断介绍 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的&#xff0c;中断功能的存在&#xff0c;很大程度上提高了单片机处理外部或内部事件的能力。它也是单片机最重要的功能之一&#xff0c;是我们学些单片机必须要掌握的。 为了更容易的理解中断概念&…...

如何设计一个秒杀系统

秒杀系统要如何设计&#xff1f; 前言 高并发下如何设计秒杀系统&#xff1f;这是一个高频面试题。这个问题看似简单&#xff0c;但是里面的水很深&#xff0c;它考查的是高并发场景下&#xff0c;从前端到后端多方面的知识。 秒杀一般出现在商城的促销活动中&#xff0c;指定…...

厄瓜多尔公司注册方案

简介&#xff1a; 经济概况与商机 厄瓜多尔是世界上第74大国家&#xff0c;是南美西部国家&#xff0c;与哥伦比亚&#xff0c;秘鲁和太平洋接壤。厄瓜多尔地处世界中心&#xff0c;地理位置优越&#xff0c;地理位置优越-赤道线零纬度&#xff0c;使其成为通往太平洋的理想枢…...

安全渗透环境准备(工具下载)

数据来源 01 一些VM虚拟机的安装 攻击机kali&#xff1a; kali官网 渗透测试工具Kali Linux安装与使用 kali汉化 虚拟机网络建议设置成NAT模式&#xff0c;桥接有时不稳定。 靶机OWASP_Broken_Web_Apps&#xff1a; 迅雷下载 网盘下载 安装教程 开机之后需要登录&am…...

118.(leaflet篇)leaflet空间判断-点与geojson面图层的空间关系(turf实现)

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html>...

目标检测与目标跟踪算法技术汇总

现如今chatgpt的爆火&#xff0c;我也使用了一段时间&#xff0c;问了许多关于人工智能技术的问题&#xff0c;基本是它能够回答了大部分的原理的&#xff0c;至于其人工智能涉及到的算法以及网络&#xff0c;考虑到也没有图&#xff0c;可能在给出这类回答上&#xff0c;是不太…...

Linux 系统启动过程

过去几十年&#xff0c;公用事业行业发生了重大变化。能源需求的转变导致企业利润率的波动&#xff0c;但不是运营成本的波动。 许多公用事业公司通过后勤部门流程自动化来削减成本&#xff0c;比如招采流程自动化。 在招采活动中&#xff0c;人工招采会产生盲点。由于公共事业…...

多智能体协同AI Coding:Multica、vibe-kanban、Maestro、OpenCove

AI辅助编码系列包括&#xff1a; Vibe Coding、AI IDE/插件Claude Code实战AI IDE/插件&#xff08;二&#xff09;:Zed、SpecKit、OpenCode、Roo Code、Plandex、Flyde、iFlow CLIAI IDE/插件&#xff08;三&#xff09;&#xff1a;OpenHands、TaskMaster、DeepCode、cc-swi…...

机器学习在非洲传染病预测与监测中的实战应用

1. 项目概述&#xff1a;当AI遇见非洲传染病防控在公共卫生领域&#xff0c;时间就是生命&#xff0c;资源就是防线。对于非洲大陆而言&#xff0c;这句话的分量尤为沉重。这里常年承受着全球最沉重的传染病负担&#xff0c;从水源性传播的霍乱、致命性极高的埃博拉&#xff0c…...

AI编程效率革命:Cursor Rules配置实战与团队协作指南

1. 项目概述&#xff1a;从“Cursor Rules”看现代开发者的效率革命最近在GitHub上看到一个名为usrrname/cursorrules的项目&#xff0c;这个标题乍一看有点意思&#xff0c;它直接点明了两个核心要素&#xff1a;cursor和rules。对于深度使用Cursor这款AI代码编辑器的开发者来…...

突发模式光功率监控技术解析与实现

1. 突发模式光功率监控的技术挑战与解决方案在光通信系统中&#xff0c;发射功率监控是确保模块稳定运行的关键技术。传统连续模式下的监控方案通过简单滤波即可获取平均值&#xff0c;但在突发模式&#xff08;Burst Mode&#xff09;应用中&#xff0c;由于信号激活时间短且动…...

为 Cursor 构建 API 协议转换网关:解决多模型兼容性问题

1. 项目概述&#xff1a;为 Cursor 打造一个全能的 API 协议转换网关如果你和我一样&#xff0c;深度依赖 Cursor 作为主力开发工具&#xff0c;同时又想灵活地使用各种第三方大模型 API&#xff08;比如那些性价比更高的中转站服务&#xff09;&#xff0c;那你一定遇到过这个…...

企业团队如何利用Taotoken统一管理API密钥与下载用量报告

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业团队如何利用Taotoken统一管理API密钥与下载用量报告 在团队协作开发与使用大模型API的过程中&#xff0c;如何安全、高效地管…...

从“砖头”到“复活”:一个大众车机蓝牙解锁的完整逆向工程记录

从“砖头”到“复活”&#xff1a;一个大众车机蓝牙解锁的完整逆向工程记录 当一台原本功能完整的车载娱乐系统因为缺少关键协议握手而变成"砖头"&#xff0c;你会怎么做&#xff1f;这个问题困扰着许多汽车电子爱好者和安全研究人员。本文记录了我如何通过逆向工程手…...

大模型监控告警失效的9大隐形陷阱(SITS技术委员会2024压力测试实录)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;大模型监控告警失效的9大隐形陷阱&#xff08;SITS技术委员会2024压力测试实录&#xff09; 在2024年SITS技术委员会开展的跨平台大模型服务压力测试中&#xff0c;超63%的生产级LLM推理集群遭遇了“告…...

AIAgent服务降级总失效?用SITS2026定义的3类语义韧性指标重构你的容错策略

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AIAgent服务降级失效的根源诊断 AIAgent 服务在高并发或依赖组件异常时&#xff0c;常配置熔断与降级策略&#xff0c;但实践中频繁出现降级逻辑未触发、兜底响应缺失或返回错误码而非预设友好内容等问…...

企业微信打卡数据拉取实战:Spring Boot + FastJSON 完整配置流程(含AccessToken获取避坑指南)

企业微信打卡数据集成实战&#xff1a;Spring Boot工程化解决方案 最近两年&#xff0c;越来越多的企业开始将考勤管理从传统硬件设备迁移到企业微信这样的数字化平台。但真正把打卡数据用起来&#xff0c;往往需要与企业内部系统深度集成。上周刚帮一家零售企业解决了这个问题…...