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

🎏:你只管努力,剩下的交给时间

🏠 :小破站

解决Spring Cloud整合Nacos与Gateway的探险之旅(报错汇总)

  • 前言
  • [Caused by: com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChannelAnnotatedConnectException: Connection refused: /127.0.0.1:9848](#Caused by: com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChannelAnnotatedConnectException: Connection refused: /127.0.0.1:9848)
  • [Client not connected, current status:STARTING](#Client not connected, current status:STARTING)
  • [Gateway 根据服务名路由失败,报错 Service Unavailable, status=503](#Gateway 根据服务名路由失败,报错 Service Unavailable, status=503)
  • [There was an unexpected error (type=Not Found, status=404).](#There was an unexpected error (type=Not Found, status=404).)

前言

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

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

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

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

我所使用的版本如下

xml 复制代码
<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的便宜
  2. 如果你配置了别的ip和端口,但是报错还是上面的,也就是配置没生效
    • 这时你需要看你是否配置了spring.cloud.nacos.server-addr,因为你即使配置了discovery和config下的server-addr也没什么用,上面的优先级更高,所以每次他都是8848,9848
  3. 如果你上面的配置也没有问题,还是报错,你需要看下你的nacos配到了哪个文件下,是application下还是bootstrap下,你需要将nacos配置放在 bootstrap.yml 中即可解决。

Client not connected, current status:STARTING

这个报错详情请点击查看

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

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

uri: lb://system-server

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

xml 复制代码
<!--客户端负载均衡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报错,也就是找不到路径,你只需要在服务中加入以下代码即可打印出你访问的路径,便于排查

java 复制代码
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访问的某一服务中加
后面还会持续更新

相关推荐
Minyy111 小时前
SpringBoot程序的创建以及特点,配置文件,LogBack记录日志,配置过滤器、拦截器、全局异常
xml·java·spring boot·后端·spring·mybatis·logback
ai大佬9 小时前
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
java·spring·自动化·api中转·apikey
来自星星的猫教授10 小时前
spring,spring boot, spring cloud三者区别
spring boot·spring·spring cloud
Bling_12 小时前
请求参数、路径参数、查询参数、Spring MVC/FeignClient请求相关注解梳理
java·spring·spring cloud·mvc
-曾牛12 小时前
企业级AI开发利器:Spring AI框架深度解析与实战
java·人工智能·python·spring·ai·rag·大模型应用
二进制独立开发13 小时前
[Trae 04.22+]适用于JAVA Spring开发的智能体提示词
spring·trae
大家都说我身材好14 小时前
Spring缓存注解深度实战:3大核心注解解锁高并发系统性能优化‌
spring·缓存·性能优化
都叫我大帅哥14 小时前
Spring AI中的ChatClient:从入门到精通,一篇搞定!
java·spring·ai编程
都叫我大帅哥14 小时前
《@SpringBootApplication:Spring Boot的"一键启动"按钮,还是程序员的"免死金牌"?》
java·后端·spring
-曾牛14 小时前
Spring AI 快速入门:从环境搭建到核心组件集成
java·人工智能·spring·ai·大模型·spring ai·开发环境搭建