解决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访问的某一服务中加
后面还会持续更新

相关推荐
珹洺2 小时前
Java-Spring入门指南(二十一)Thymeleaf 视图解析器
java·开发语言·spring
源码集结号2 小时前
一套智慧工地云平台源码,支持监管端、项目管理端,Java+Spring Cloud +UniApp +MySql技术开发
java·mysql·spring cloud·uni-app·源码·智慧工地·成品系统
EnCi Zheng2 小时前
Spring Security 最简配置完全指南-从入门到精通前后端分离安全配置
java·安全·spring
鸽鸽程序猿5 小时前
【项目】基于Spring全家桶的论坛系统 【下】
后端·spring·restful
Lisonseekpan6 小时前
Spring Boot 中使用 Caffeine 缓存详解与案例
java·spring boot·后端·spring·缓存
小许学java6 小时前
Spring AI快速入门以及项目的创建
java·开发语言·人工智能·后端·spring·ai编程·spring ai
kfepiza8 小时前
Spring 如何解决循环依赖 笔记251008
java·spring boot·spring
kfepiza9 小时前
Spring的三级缓存原理 笔记251008
笔记·spring·缓存
popoxf19 小时前
spring容器启动流程(反射视角)
java·后端·spring
INFINI Labs19 小时前
如何使用 INFINI Gateway 对比 ES 索引数据
大数据·elasticsearch·gateway·easysearch