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

简介: 解决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访问的某一服务中加

后面还会持续更新

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
4月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
3555 74
|
5月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
5月前
|
XML Java Nacos
Spring Boot 整合Nacos 版本兼容适配 史上最详细文档
本文介绍SpringBoot整合Nacos的完整流程,涵盖Nacos下载安装、配置中心与服务发现集成、版本兼容性问题及实战配置。重点解决SpringBoot 3.3.0与Nacos版本适配难题,推荐使用Spring Cloud Alibaba方案,并提供项目开源地址供参考学习。
|
7月前
|
Dubbo 数据可视化 Java
整合SpringBoot、Dubbo与Nacos:一个快速入门教程
经过上述步骤,消费者模块成功引用了生产者提供的服务,并通过Spring Web将服务映射到了特定的URL路径上。消费者模块成功地调用并展示了生产者提供的数据,并在不移除特定依赖项的情况下确保了系统的正常运行。
|
4月前
|
缓存 JSON NoSQL
别再手写过滤器!SpringCloud Gateway 内置30 个,少写 80% 重复代码
小富分享Spring Cloud Gateway内置30+过滤器,涵盖请求、响应、路径、安全等场景,无需重复造轮子。通过配置实现Header处理、限流、重试、熔断等功能,提升网关开发效率,避免代码冗余。
526 1
|
7月前
|
前端开发 Java API
Spring Cloud Gateway Server Web MVC报错“Unsupported transfer encoding: chunked”解决
本文解析了Spring Cloud Gateway中出现“Unsupported transfer encoding: chunked”错误的原因,指出该问题源于Feign依赖的HTTP客户端与服务端的`chunked`传输编码不兼容,并提供了具体的解决方案。通过规范Feign客户端接口的返回类型,可有效避免该异常,提升系统兼容性与稳定性。
511 0
|
8月前
|
缓存 监控 Java
说一说 SpringCloud Gateway 堆外内存溢出排查
我是小假 期待与你的下一次相遇 ~
1098 5
|
8月前
|
Java API Nacos
|
12月前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
4615 14

热门文章

最新文章