[alibaba/nacos]使用2.2.1版本发现服务启动时调用此接口/nacos/v1/ns/instance/beat,出现400报错

2024-03-04 467 views
3

服务启动后报错内容如下

com,alibaba.nacos.api.exception.NacosException: <!doctype html><html lang="en"><head><title>HTTP Status 400 - Bad Reguest</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;! h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;} </style></head><body><h1>HTTP Status 400 - Bad Request</h1></body></html>
    at com.alibaba.nacos.client.naming.net.NamingProxy.callserver(NamingProxy.java:615) [nacos-client-1.4.1.jar:na]
    at com.alibaba.nacos.client.naming.net.NamingProxy.reApi(NamingProxy.java:526) nacos-client-1.4.1.jar:na]
    at com.alibaba.nacos.client.naming.net.NamingProxy.regApiNamingProxy.java:498) [nacos-client-1.4.1.jar:na]
    at com.alibaba.nacos.client.naming.net.NamingProxy.sendBeatNamingProxy.java:433) [nacos-client-1.4.1.jar:na]
    at com.alibabanacosclient.naming.beat.BeatReactor$BeatTask.run(BeatReactor.java:167) [nacos-client-1.4.1.jar:na]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0 191]
    at java.util.concurrent .FutureTask.run$$$capture(tureTask.java: 266) na:1.8.0 191
    at java .util.concurrent .FutureTask.run(FutureTaskjavana:1.8.0_191
    at java.util.concurrent .ScheduledthreadPoolExecutor$scheduledFutureTask.access$201(ScheduledthreadPoolExecutor.java:180)na:1.8.0 191
    ...........................

debug断点后,发现是健康检查的这个接口/nacos/v1/ns/instance/beat报400,但是2.1.0版本没有此问题,想问下从nacos 2.1.0升级到nacos 2.2.1是需要升级maven依赖吗,如果是,那么对应的依赖版本又是多少

回答

3

我使用nacos-client 1.4.1 + nacos-server 2.2.1 无法复现此问题, 请提供更详细信息。

或使用直接使用nacos-client 1.4.1 直连 nacos-server 2.2.1尝试。

2

会不会是因为我在通过docker容器启动nacos服务时使用了下面的三个参数导致的,我直接拉取docker容器中的nacosjar包也没有出现前面说的报错。

-e NACOS_AUTH_IDENTITY_KEY=HShsgNgNBvuIoK -e NACOS_AUTH_IDENTITY_VALUE=LjshGWYgBBnjIkK -e NACOS_AUTH_TOKEN=KhshUSjkHfBjYUInFFHYQI214388137172366

关于前面的报错补充下描述: 除了put 请求/nacos/v1/ns/instance/beat会出现报错之外,post请求调用/nacos/v1/ns/instance也会出现报错,另外这个接口/nacos/v1/ns/instance/beat有时候能够调用成功,我也对比了下两次接口(一次成功一次失败)请求的参数【/nacos/v1/ns/instance/beat】,发现只有一个requestId字段参数不同

9

验证了下,如果不使用下面的参数创建nacos容器 -e NACOS_AUTH_ENABLE=true -e NACOS_AUTH_IDENTITY_KEY=HShsgNgNBvuIoK -e NACOS_AUTH_IDENTITY_VALUE=LjshGWYgBBnjIkK -e NACOS_AUTH_TOKEN=KhshUSjkHfBjYUInFFHYQI214388137172366 使用下面的参数,就不会报错,但是我这边是需要开启鉴权的,想问下是上面的设置哪里有问题,还是说少了个什么 -e NACOS_AUTH_ENABLE=false

4

而且nacos只返回个400 bad request啥问题也看不出来额

7

再加上一个参数后,不再显示报错信息 NACOS_AUTH_CACHE_ENABLE 因此目前的配置参数如下: -e NACOS_AUTH_CACHE_ENABLE=true -e NACOS_AUTH_ENABLE=true -e NACOS_AUTH_IDENTITY_KEY=HShsgNgNBvuIoK -e NACOS_AUTH_IDENTITY_VALUE=LjshGWYgBBnjIkK -e NACOS_AUTH_TOKEN=KhshUSjkHfBjYUInFFHYQI214388137172366 麻烦确认下,是否是不开启NACOS_AUTH_CACHE_ENABLE缓存就会出现部分接口调用失败,还是说这个缓存开启后,只是将频繁的400 bad request变更为了每18000秒有几率出现一次400 bad request

6

后面排查发现猜测可能是参数的value值格式不正确,比如用了value值用了@符号,我前面除了接口报错,还遇到过客户端连接不通,集群间节点不通的问题。 建议官方文档提供下下面参数的设置规范,以及抛出明确的报错信息,实在太难排查了 NACOS_AUTH_IDENTITY_KEY、NACOS_AUTH_IDENTITY_VALUE、NACOS_AUTH_TOKEN

9

是的,不能加特殊字符