SpringBoot增加网关服务

一、新建gateway项目

二、添加依赖

dependencies {
      implementation 'org.springframework.cloud:spring-cloud-starter-gateway:4.0.0'
}

三、增加路由规则配置

一个web服务、一个service服务

bootstrap.yaml:

server:
  port: 80
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_ADDR:127.0.0.1:8848}
        namespace: ${NACOS_NAMESPACE:demo}
        username: nacos
        password: nacos
      config:
        #nacos配置中心服务器地址
        server-addr: ${NACOS_ADDR:127.0.0.1:8848}
        #nacos配置中心命名空间
        namespace: ${NACOS_NAMESPACE:demo}
        #文件后缀格式
        file-extension: yaml
        #nacos配置中心分组
        group: ${spring.application.name}
        username: nacos
        password: nacos
        #扩展文件,目前用于全局共享,下面的优先级高
        ext-config:
          - data-id: commom.yaml
            group: common
            refresh: true

application.yaml:

spring:
  main:
    web-application-type: reactive
  cloud:
    gateway:
      routes:
        #业务服务
        - id: web_route
          uri: lb://web
          predicates:
            - Path=/web/**
          filters:
            - RewritePath=/(?<segment>.*),/$\{segment}
        #支撑服务
        - id: service_route
          uri: lb://service
          predicates:
            - Path=/service/**
          filters:
            - RewritePath=/(?<segment>.*),/$\{segment}

四、增加过滤器(可选)

比如认证、鉴权、日志打印等

例如:打印日志,用@Slf4j 注解来简化日志记录、

增加依赖

		compileOnly 'org.projectlombok:lombok:1.18.24' // 使用最新版本
		annotationProcessor 'org.projectlombok:lombok:1.18.24'
		implementation 'org.slf4j:slf4j-api:2.0.6'
		runtimeOnly 'ch.qos.logback:logback-classic:1.4.5'

代码:

@Slf4j
@Component
public class RequestLogFilter implements GlobalFilter, Ordered {

    private static final String START_TIME_KEY = "startTime";

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        ServerHttpRequest request = exchange.getRequest();
        String method = Objects.requireNonNull(request.getMethod()).name();

        String requestURI = request.getPath().toString();
        String remoteAddr = Objects.requireNonNull(request.getRemoteAddress()).getHostString();

        System.out.println("method=" + method +";requestURI= "+ requestURI+ "; remoteAddr="+remoteAddr);
        log.info("method=" + method +";requestURI= "+ requestURI+ "; remoteAddr="+remoteAddr);

        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return 1;
    }
}

五、增加启动类并运行测试

@SpringBootApplication(scanBasePackages = {"com.example"})
@EnableDiscoveryClient
public class GatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }

}

运行访问,用80端口

六、遇到的问题

1、启动报错

缺少依赖的包

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2024-07-16T16:27:44.792+08:00 ERROR 9924 --- [gateway] [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Web application could not be started as there was no org.springframework.boot.web.reactive.server.ReactiveWebServerFactory bean defined in the context.

Action:

Check your application's dependencies for a supported reactive web server.
Check the configured web application type.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/803149.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

品牌产业出海指南如何搭建国际化架构的跨境电商平台?

在“品牌&产业出海指南 – 成功搭建跨境电商平台”系列中&#xff0c;我们将从电商分销系统、跨境平台商城/多商户商城系统和国际化架构三个方面对帮助您梳理不同平台模式的优缺点、应用场景、开发重点和运营建议。 在“品牌&产业出海指南 – 成功搭建跨境电商平台”系…

记录|实体PLC+原理+编址

记录来源&#xff1a; 看一看PLC上面的文字写了什么信息呢~ PLC原理 PLC编址 PLC编址3 PLC编址4 额外补充&#xff1a; 开关量输入硬件连接&#xff08;2)-按钮的接线 目录 总结一、DC/DC/DC二、DI a三、AI四、DQ五、AQ六、PLC原理七、PLC编址1. I、Q、M2. 编址表达2.1 位地址表…

R语言实现对模型的参数优化与评价KS曲线、ROC曲线、深度学习模型训练、交叉验证、网格搜索

目录 一、模型性能评估 1、数据预测评估 2、概率预测评估 二、模型参数优化 1、训练集、验证集、测试集的引入 2、k折线交叉验证 2、网格搜索 一、模型性能评估 1、数据预测评估 ### 数据预测评估 #### 加载包&#xff0c;不存在就进行在线下载后加载if(!require(mlben…

vue项目1分钟实现自定义右键菜单,懒人的福音

高效实现需求&#xff0c;避免重复造轮子&#xff0c;今天给大家分享的是&#xff0c;如何在最短的时间内实现右键菜单&#xff0c;方法也很简单&#xff0c;一个插件就可以搞定&#xff0c;话不多说&#xff0c;上效果图&#xff1a; 1. 效果图&#xff1a; 2. 安装&#xff…

【tabby】Tabby : vi/vim 中文乱码问题

修改配置文件&#xff1a; 原始是&#xff1a; appearance: {}替换为&#xff1a; 如下位置填写&#xff1a;UTF-8 或者 GBK。试试&#xff0c;重启tabby后查看效果。 注意-前是有两个空格的。 appearance:- Character encoding: UTF-8 参考文章 Tabby使用之:中文乱码问题

Pycharm 导入 conda 环境

使用时经常在此处卡壳&#xff0c;在此做个记录。 这个位置选择 conda 安装路径下的 python.exe 文件即可

C语言之大小端理解

目录 1前言2 大小端理解与区分3 大小端的识别和基本切换操作4 总结 1前言 在汽车CAN通讯报文中往往会接触到Intel类型和motorola类型&#xff0c;实际项目中涉及到多机通讯也会接触到大小端问题 2 大小端理解与区分 大端(Big_Endian) :低字节放在高地址小端(Little_Endian):…

STM32智能交通灯系统教程

目录 引言环境准备智能交通灯系统基础代码实现&#xff1a;实现智能交通灯系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;交通管理与优化问题解决方案与优化收尾与总结 1. 引言 智能交通灯系统通过STM…

提高使用安全,智慧校园在线用户功能概述

智慧校园系统融入了一个查看当前在线用户的功能&#xff0c;这一设计旨在为管理人员提供一个实时的窗口&#xff0c;洞悉校园平台的即时活跃情况&#xff0c;确保系统的高效运作与环境安全。通过这一功能&#xff0c;管理员能够一目了然地看到所有正活跃在平台上的用户群体&…

古玻璃制品的成分分析与鉴别详解【国一,附完整代码】

​ 声明&#xff1a;2024年数模国赛即将来临&#xff0c;为助力国赛和钉钉杯&#xff0c;我将重温22年小样本国赛C题和23年大样本国赛C题&#xff0c;给出详细思路和完整代码&#xff0c;供广大数模爱好者阅览&#xff0c;如需比赛指导&#xff0c;请联系文章底部卡片咨询。 未…

【实战】安装Webtours

首先&#xff0c;安装jdk。过程如下图。 添加环境变量&#xff0c;如下图。 安装activeperl&#xff0c;如下图。 复制Webtours文件夹到计算机中&#xff0c;之后双击webtours文件夹中的xigui32.exe&#xff0c;启动webtours的应用服务器。 之后&#xff0c;可以在任务栏右下角…

10校大满贯!中国内地高校2024年1-6月CNS发文统计出炉

随着全球科研竞争的日趋激烈&#xff0c;CNS&#xff08;Cell、Nature、Science&#xff09;作为科学领域的三大顶级期刊&#xff0c;不仅是科研成果的展示平台&#xff0c;更是各国科研实力比拼的重要战场。近年来&#xff0c;中国高校在国际科研舞台上的表现愈发抢眼&#xf…

LocalAI离线安装部署

简介 LocalAI是免费的开源 OpenAI 替代品。LocalAI 可作为替代 REST API&#xff0c;与 OpenAI&#xff08;Elevenlabs、Anthropic……&#xff09;API 规范兼容&#xff0c;用于本地 AI 推理。它允许您在本地或使用消费级硬件运行 LLM、生成图像、音频&#xff08;不止于此&a…

xmind梳理测试点,根据这些测试点去写测试用例

基本流&#xff08;冒烟用例必写&#xff09; 备选流 公共测试点&#xff1a;

Large Language Model系列之二:Transformers和预训练语言模型

Large Language Model系列之二&#xff1a;Transformers和预训练语言模型 1 Transformer模型 Transformer模型是一种基于自注意力机制的深度学习模型&#xff0c;它最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出&#xff0c;主要用于机器翻译任务。随…

Linux下如何安装配置Graylog日志管理工具

Graylog是一个开源的日志管理工具&#xff0c;可以帮助我们收集、存储和分析大量的日志数据。它提供了强大的搜索、过滤和可视化功能&#xff0c;可以帮助我们轻松地监控系统和应用程序的运行情况。 在Linux系统下安装和配置Graylog主要包括以下几个步骤&#xff1a; 准备安装…

Hadoop3:HDFS存储优化之小文件归档

一、情景说明 我们知道&#xff0c;NameNode存储一个文件元数据&#xff0c;默认是150byte大小的内存空间。 那么&#xff0c;如果出现很多的小文件&#xff0c;就会导致NameNode的内存占用。 但注意&#xff0c;存储小文件所需要的磁盘容量和数据块的大小无关。 例如&#x…

学习Python的IDE功能--(一)入门导览

项目视图是主要工具窗口之一。它包含项目目录、SDK 特定的外部库和临时文件。点击带条纹的按钮可以预览演示项目。您也可以按Alt1打开。点击以打开项目视图&#xff0c;展开项目目录以查看项目文件。双击以打开welcome.py。 切换到"学习"工具窗口继续学习本课次。…

Qt中 .pro、.pri、.prf、.prl文件简解

一、pro文件 .pro就是工程文件&#xff08;project&#xff09;&#xff0c;是Qt项目的主配置文件&#xff0c;用于描述整个项目的基本信息和编译配置。在Qt中用qmake生成makefile文件&#xff0c;它是由.pro文件生成而来的&#xff0c;.pro文件的具体格式语法如下&#xff1a…

关于Ubuntu22.04中的Command ‘vim‘ not found, but can be installed with:

前言 在Ubuntu终端编辑文本内容时需要利用vim&#xff0c;但新安装的虚拟机中并未配置vim&#xff0c;本文记录了vim的安装过程。 打开终端后&#xff0c;在home目录中输入 vim test.txt但提示报错&#xff0c;提示我们没有找到vim&#xff0c;需要通过以下命令进行安装&…