[alibaba/nacos]在开启auth为true后,客户端启动完隔一阵就报403

2024-03-04 934 views
8
com.alibaba.nacos.api.exception.NacosException: http error, code=403,dataId=huoban.abc.net,group=domain-name-mapping,tenant=
        at com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient.queryConfig(ClientWorker.java:1035)
        at com.alibaba.nacos.client.config.impl.ClientWorker.getServerConfig(ClientWorker.java:407)
        at com.alibaba.nacos.client.config.NacosConfigService.getConfigInner(NacosConfigService.java:166)
        at com.alibaba.nacos.client.config.NacosConfigService.getConfig(NacosConfigService.java:94)
        at com.jd.magnus.cms.service.nacos.NacosService.getConfig(NacosService.java:94)
        at com.jd.magnus.cms.controller.MallController.queryInfoById(MallController.java:501)
        at sun.reflect.GeneratedMethodAccessor340.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)

在客户端是加入了用户名密码的

Properties properties = new Properties();
        properties.put("serverAddr", nacosConfigProperties.getServerAddr());
        properties.put("username", nacosConfigProperties.getUsername());
        properties.put("password", nacosConfigProperties.getPassword());
        this.configService = NacosFactory.createConfigService(properties);

使用上一阵后,代码中连nacos去查询和push就都不行了,看不出什么问题

回答

8

这个可能是因为token过期导致的,但客户端后台线程会自动更新token,当token有效期在十分之一的时间以内时就会更新; 默认的token有效期是18000秒。

你可以看下对应的服务端日志确认一下。

9

你好,我有两个服务都去通过配置NacosService连nacos了,都是以上配置,但是其中一个服务已经好多天没报连不上了,按理说这个18000秒过期,会一直调api查不回来才是。另外,如果这个过期时间有影响,那通过代码去交互nacos的话,这个怎么解决

2

我试了一下,确实隔这么长时间到token过期后,代码里连不上nacos了,这个需要哪里配置呢,我用的nacos-client是2.0.3

2

我实在不知道从哪配,所以只能以失败捕获异常后重新创建连接来绕过了。

7

从clientworker看,当前是client请求server出现的问题。可以看下

`com.alibaba.nacos.client.config.impl.ConfigTransportClient#start

这里面首次login后,将token信息存在上下文中。再启用一个线程池进行重复login。你看下线程池重复login的配置信息。是否可以调整下。

FYI @ghairui

7

我用arthas看了,线程里没有com.alibaba.nacos.client.Worker,像是start里login了一次后,下面的scheduleWithFixedDelay没执行一样

9

你arthas看的哪个? 你可以看下 com.alibaba.nacos.client.security.SecurityProxy#login这个方法有没有调用

1

第一次肯定是调用的,要不也不会鉴权,毕竟properties里加了用户名密码,按理超过9/10的过期时间后,会重新login赋accessToken,但是要真执行了就不应该到期403呀

7

我看了一个帖子,上面说是核心线程不够 https://blog.csdn.net/Dongguabai/article/details/122644285 本地试确实是,1个线程时执行一次就不执行了 我在程序中打印了一下 ThreadUtils.getSuitableThreadCount(1) 取到确实为1,所以我把k8s启动客户端服务的yml中将resources.limits.cpu设为2,再打印结果就为2了。

7

我看了下文章,问题应该在新版本中已经修复了

最新代码里com.alibaba.nacos.client.Worker这个线程池最小值是2

3

是的 知道RC,可以升级到最新版本里面去解决 (๑•̀ㅂ•́)و✧

9

遇到了相同的问题,猜到了是token过期了。