解决Spring Cloud整合Nacos与Gateway的探险之旅

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 解决Spring Cloud整合Nacos与Gateway的探险之旅

前言

在当今云原生应用的激动人心时代,Spring Cloud作为一种流行的微服务框架,与Nacos配置中心和Gateway网关的整合,为开发者提供了强大而灵活的工具来构建可伸缩的分布式系统。然而,尽管这个技术栈带来了无限的可能性,但在实践中,我们经常会遇到一些令人挑战的问题。

这篇博客将带领你进入一个关于整合Spring Cloud、Nacos和Gateway的探险之旅。我们将分享在这个旅程中遇到的挑战、解决方案以及从中学到的宝贵经验。从服务注册与发现、动态配置到网关路由的管理,我们将深入探讨每个阶段的问题,助你更好地理解和克服这些技术整合的难题。

无论你是初学者还是有经验的开发者,这篇博客都将为你提供有关整合Spring Cloud、Nacos和Gateway的实用见解。通过分享我们在这个过程中的失败和成功,我们希望为你的微服务架构提供更多价值,帮助你更加自信地面对这个激动人心的技术领域。

让我们一起踏上这次探险之旅,发现并解决在整合Spring Cloud、Nacos和Gateway过程中可能遇到的各种问题。希望这篇博客能够成为你在构建分布式系统时的有力向导。

我所使用的版本如下

<spring.boot.version>2.7.8</spring.boot.version>
<spring.cloud.version>2021.0.5</spring.cloud.version>
<spring.cloud.alibaba.version>2021.0.4.0</spring.cloud.alibaba.version>
nacos客户端使用的2.2.3

Caused by: com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: /127.0.0.1:9848

  1. 如果你出现的这个问题是因为你压根在配置文件中没有配nacos地址的话,或者本来就是配置的8848
  • 这时你需要看是否开启了9848端口,因为它这里默认使用的是主端口+1000的便宜
  1. 如果你配置了别的ip和端口,但是报错还是上面的,也就是配置没生效
  • 这时你需要看你是否配置了spring.cloud.nacos.server-addr,因为你即使配置了discovery和config下的server-addr也没什么用,上面的优先级更高,所以每次他都是8848,9848
  1. 如果你上面的配置也没有问题,还是报错,你需要看下你的nacos配到了哪个文件下,是application下还是bootstrap下,你需要将nacos配置放在 bootstrap.yml 中即可解决。

Client not connected, current status:STARTING

这个报错详情请点击查看

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

出现上面的错误是因为你使用了负载均衡,也就是如下配置

uri: lb://system-server

⛑:加入以下依赖即可解决

<!--客户端负载均衡loadbalancer-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

具体原因是springcloud2020弃用了Ribbon

There was an unexpected error (type=Not Found, status=404).

这个报错是典型的404报错,也就是找不到路径,你只需要在服务中加入以下代码即可打印出你访问的路径,便于排查

package fun.bo.config;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
@Component
@Order(1) // 设置过滤器的执行顺序,确保在其他过滤器之前执行
public class RequestLoggingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 这里可以进行一些初始化操作,如果有的话
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // 获取请求路径
        String requestURI = ((javax.servlet.http.HttpServletRequest) request).getRequestURI();
        // 打印请求路径
        System.out.println("Request Path: " + requestURI);
        // 继续处理请求
        chain.doFilter(request, response);
    }
    @Override
    public void destroy() {
        // 这里可以进行一些清理操作,如果有的话
    }
}

以上代码是你通过gateway访问的某一服务中加

后面还会持续更新

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
5天前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
|
24天前
|
存储 Java Nacos
Spring Cloud+Nacos+KMS 动态配置最佳实践
本文讲述了 Spring Cloud 应用中结合 Nacos 实现了运行期配置动态更新的功能,以及在此基础上结合 KMS 在不改动代码的情况下对应用使用的敏感配置进行保护,解决将配置迁移到 Nacos 中可能存在的数据安全顾虑,并对其底层工作原理做了简单介绍。
339 14
|
10天前
|
JavaScript Java Kotlin
深入 Spring Cloud Gateway 过滤器
Spring Cloud Gateway 是新一代微服务网关框架,支持多种过滤器实现。本文详解了 `GlobalFilter`、`GatewayFilter` 和 `AbstractGatewayFilterFactory` 三种过滤器的实现方式及其应用场景,帮助开发者高效利用这些工具进行网关开发。
|
15天前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
31 6
|
15天前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
35 5
|
15天前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
27 5
|
27天前
|
存储 人工智能 Java
Spring AI Alibaba 配置管理,用 Nacos 就够了
本文通过一些实操案例展示了 Spring AI Alibaba + Nacos 在解决 AI 应用中一系列复杂配置管理挑战的方案,从动态 Prompt 模板的灵活调整、模型参数的即时优化,到敏感信息的安全加密存储。Spring AI Alibaba 简化了对接阿里云通义大模型的流程,内置 Nacos 集成也为开发者提供了无缝衔接云端配置托管的捷径,整体上极大提升了 AI 应用开发的灵活性和响应速度。
178 12
|
2月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
169 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
18天前
|
负载均衡 Java API
项目中用的网关Gateway及SpringCloud
Spring Cloud Gateway 是一个功能强大、灵活易用的API网关解决方案。通过配置路由、过滤器、熔断器和限流等功能,可以有效地管理和保护微服务。本文详细介绍了Spring Cloud Gateway的基本概念、配置方法和实际应用,希望能帮助开发者更好地理解和使用这一工具。通过合理使用Spring Cloud Gateway,可以显著提升微服务架构的健壮性和可维护性。
24 0
|
3月前
|
Java 开发者 Spring
Spring Cloud Gateway 中,过滤器的分类有哪些?
Spring Cloud Gateway 中,过滤器的分类有哪些?
74 3