• 解决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.8spring.boot.version>
    <spring.cloud.version>2021.0.5spring.cloud.version>
    <spring.cloud.alibaba.version>2021.0.4.0spring.cloud.alibaba.version>
    nacos客户端使用的2.2.3
    
    • 1
    • 2
    • 3
    • 4

    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

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

    
    <dependency>
      <groupId>org.springframework.cloudgroupId>
      <artifactId>spring-cloud-starter-loadbalancerartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    具体原因是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() {
            // 这里可以进行一些清理操作,如果有的话
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

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

    后面还会持续更新

  • 相关阅读:
    会员管理系统几种消费模式的简要介绍
    Java之泛型
    python的decord库存在内存泄漏
    链表的概念+MySingleList的实现
    业界首创云原生安全检测双模型!安全狗重磅报告亮相数字中国建设峰会
    合肥先进光源束测系统工控机数量需求的初步估计
    云原生精品资料合集(附下载)
    STL 中排序相关算法总结
    将Perl5代码迁移到Perl6上的解决方案
    【小尘送书-第九期】《Excel数据透视表应用大全for Excel 365 & Excel 2019》
  • 原文地址:https://blog.csdn.net/Mrxiao_bo/article/details/134514942