V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tuine
V2EX  ›  Java

spring boot 请求接口,时不时报 404,如何定位问题?

  •  
  •   tuine · 152 天前 · 2080 次点击
    这是一个创建于 152 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有没有 V 友碰到过的,偶尔会出现 404

    {
        "timestamp": "2021-06-29T06:46:35.477+0000",
        "status": 404,
        "error": "Not Found",
        "message": "No message available",
        "path": "/auth/info"
    }
    

    使用的nacos,但是此服务只启动了一个,yml 配置:

          routes:
            - id: auth-service
              uri: lb://auth-service
              predicates:
                - Path=/v1/auth/**
              filters:
                - StripPrefix=1
            - id: bus-service
              uri: lb://bus-service
              predicates:
                - Path=/v1/**
              filters:
                - StripPrefix=1
    
    第 1 条附言  ·  151 天前

    增加了个链路追踪,发现路由应该是走了id: bus-service,/v1/**的规则,所以结论应该是:route的书写顺序并不能保证路由的匹配优先级。然后查询有order配置,增加上了,跑一段时间看看。

    15 条回复    2021-06-30 14:39:23 +08:00
    liian2019
        1
    liian2019   152 天前
    是不是负载均衡的原因
    shanghai1943
        2
    shanghai1943   152 天前
    最好提供一下架构信息以及相应的日志信息来排查分析,目前没有更多信息的话也看不出所在
    statement
        3
    statement   152 天前
    是不是用了网关。 然后用服务名调用?
    tuine
        4
    tuine   152 天前
    补充:
    spring boot: 2.2.6.RELEASE
    spring cloud: Hoxton.SR1
    网关使用 spring cloud gateway

    404NOT FOUND,暂时没有额外日志。

    GET: localhost:9000/auth/info?token=gNGLJLLZsluDsIQw 访问后偶然出现。
    auth-service,controller:

    ```java
    @RestController
    @RequestMapping("/auth")
    @RequiredArgsConstructor
    public class AuthController {

    private final AuthService authService;

    @GetMapping("info")
    public Result info(@RequestParam("token") String token) {
    Map<String, Object> stringObjectMap = authService.getInfo(token);

    return ResultGenerator.success(stringObjectMap);
    }
    }
    ```
    tuine
        5
    tuine   152 天前
    @statement #3 对,走的 lb://auth-service
    tuine
        6
    tuine   152 天前
    @liian2019 #1 有可能,但是我只启动了一个服务,偶尔出现很难测~
    statement
        7
    statement   152 天前
    nacos 不知道 应该是类似的问题 建议试试 直接用 ip 调用。是不是就不会出现这个问题
    之前用 zuul 也遇到过同样问题 用地址访问没问题 用服务名会间歇性 404 。频率还很高 刷快一点 10 次里有 5 次 404

    解决办法:
    方式 1.用地址访问不用服务名访问
    zuul.routes.api-url.path=/api/**
    zuul.routes.api-url.url=http://127.0.0.1:9011/

    方式 2.在被调用的服务里开启 prefer-ip-address
    eureka.instance.prefer-ip-address=true
    eureka.instance.ipAddress=127.0.0.1
    demobin
        8
    demobin   152 天前
    估计是有谁开发注册上 nacos 去了,然后负载到他那内网可能不通之类的。
    tuine
        9
    tuine   152 天前
    @demobin #8 没,我进 nacos 看了,只有一个实例
    tuine
        10
    tuine   152 天前
    @statement #7 我试试
    tuine
        11
    tuine   152 天前
    @shanghai1943 #2 404 没有太详细的日志 😂
    leafre
        12
    leafre   152 天前
    尝试调节 ribbon 参数
    wqhui
        13
    wqhui   152 天前
    @demobin 这种不是 404,是接口超时
    tyit
        14
    tyit   152 天前 via iPhone
    断点 Debug 一下
    tuine
        15
    tuine   152 天前
    @tyit #14 不太频繁,几百次请求后能有连续的四五次,而且是测试环境
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1088 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:31 · PVG 04:31 · LAX 12:31 · JFK 15:31
    ♥ Do have faith in what you're doing.