首页 > 其他分享 >Nacos启动:[NACOS HTTP-POST] The maximum number of tolerable server reconnection errors has been reache

Nacos启动:[NACOS HTTP-POST] The maximum number of tolerable server reconnection errors has been reache

时间:2024-01-25 10:47:01浏览次数:28  
标签:HTTP serverListMgr currentServerAddr maximum server NACOS maxRetry reconnection

一、表象

image.png

二、分析

源码:

public HttpRestResult<String> httpPost(String path, Map<String, String> headers, Map<String, String> paramValues,
            String encode, long readTimeoutMs) throws Exception {
    final long endTime = System.currentTimeMillis() + readTimeoutMs;
    injectSecurityInfo(paramValues);
    String currentServerAddr = serverListMgr.getCurrentServerAddr();
    int maxRetry = this.maxRetry;
    HttpClientConfig httpConfig = HttpClientConfig.builder()
        .setReadTimeOutMillis(Long.valueOf(readTimeoutMs).intValue())
        .setConTimeOutMillis(ConfigHttpClientManager.getInstance().getConnectTimeoutOrDefault(3000)).build();
    do {

        try {
            Header newHeaders = getSpasHeaders(paramValues, encode);
            if (headers != null) {
                newHeaders.addAll(headers);
            }
            HttpRestResult<String> result = NACOS_RESTTEMPLATE
                .postForm(getUrl(currentServerAddr, path), httpConfig, newHeaders, paramValues, String.class);

            // 错误码 HTTP_INTERNAL_ERROR = 500 || HTTP_BAD_GATEWAY = 502 || HTTP_UNAVAILABLE = 503 为异常
            if (isFail(result)) {
                LOGGER.error("[NACOS ConnectException] currentServerAddr: {}, httpCode: {}", currentServerAddr,
                             result.getCode());
            } else {
                // Update the currently available server addr
                serverListMgr.updateCurrentServerAddr(currentServerAddr);
                // 应从这里返回,否则会进入重试
                return result;
            }
        } catch (ConnectException connectException) {
            LOGGER.error("[NACOS ConnectException httpPost] currentServerAddr: {}, err : {}", currentServerAddr,
                         connectException.getMessage());
        } catch (SocketTimeoutException socketTimeoutException) {
            LOGGER.error("[NACOS SocketTimeoutException httpPost] currentServerAddr: {}, err : {}",
                         currentServerAddr, socketTimeoutException.getMessage());
        } catch (Exception ex) {
            LOGGER.error("[NACOS Exception httpPost] currentServerAddr: " + currentServerAddr, ex);
            throw ex;
        }

        // 重试逻辑
        if (serverListMgr.getIterator().hasNext()) {
            currentServerAddr = serverListMgr.getIterator().next();
        } else {
            // maxRetry = 3
            maxRetry--;
            if (maxRetry < 0) {
                throw new ConnectException(
                    "[NACOS HTTP-POST] The maximum number of tolerable server reconnection errors has been reached");
            }
            serverListMgr.refreshCurrentServerAddr();
        }

    } while (System.currentTimeMillis() <= endTime);

    LOGGER.error("no available server, currentServerAddr : {}", currentServerAddr);
    throw new ConnectException("no available server, currentServerAddr : " + currentServerAddr);
}

image.png

三、解决

将配置文件application.yml更改为bootstrap.yml

标签:HTTP,serverListMgr,currentServerAddr,maximum,server,NACOS,maxRetry,reconnection
From: https://www.cnblogs.com/meidanlong/p/17986599

相关文章

  • 如何让你的.NET WebAPI程序支持HTTP3?
    下面我将总结构建Http3的经验,以TokenGateway的项目为例,请注意使用Http3之前你需要知道它的限制,WindowsWindows11版本22000或更高版本/WindowsServer2022。TLS1.3或更高版本的连接。Linux已安装libmsquic包。实现讲解首先我们需要拉取我们的代码gitcloneh......
  • HTTP响应码
    我们知道HTTP协议是通过HTTP请求和HTTP响应来实现双向通信的。HTTP状态码(HTTPStatusCode)是用以表示Web服务器HTTP响应状态的3位数字代码,由RFC2616规范定义。合理的状态码不仅可以让用户或者浏览器做出更加合适的进一步操作,而且可以让客户端代码更加易于理解和维护。HTTP状态......
  • 使用Java中的HttpClient进行网络请求
    使用Java中的HttpClient进行网络请求是一种常见的操作,它可以帮助我们轻松地发送HTTP请求并获取响应。以下是使用Java中的HttpClient进行网络请求的基本步骤:1. 添加依赖:首先,确保您的项目中包含了HttpClient的依赖。如果您使用的是Maven项目,请在pom.xml文件中添加以下依赖:2. xml复......
  • Java中的HTTPS通信
    在Java中实现HTTPS通信,主要涉及到SSL/TLS协议的使用,用于提供数据传输的安全性。下面我们将深入探讨如何使用Java进行HTTPS通信。一、基本概念HTTPS,全称为HypertextTransferProtocolSecure,是HTTP的安全版本。它使用SSL/TLS协议对传输的数据进行加密,确保数据在传输过程中的安全。......
  • Java中的HTTP状态码
    HTTP状态码是Web应用程序中用于表示请求响应状态的一组数字代码。在Java中,我们可以使用HttpServletResponse对象的setStatus()方法设置HTTP状态码。以下是一些常见的HTTP状态码及其含义:1. 200OK:请求成功。这是最常见的状态码,表示请求已成功处理。2. 404NotFound:服务器无法找到......
  • 使用Spring Boot实现基于HTTP的API
    SpringBoot是一个用于简化Spring应用程序开发的框架,它提供了一系列的开箱即用的功能,使得快速构建RESTfulWeb服务和基于HTTP的API变得简单。以下是使用SpringBoot实现基于HTTP的API的步骤:1. 添加依赖:在Maven项目中,将SpringBootWebStarter依赖添加到pom.xml文件中。2. java复......
  • Nginx正向代理https
    Nginx支持正向代理http协议,但是不支持https协议,如果需要Nginx实现https协议的正向代理,需要使用第三方模块。参考地址:https://blog.csdn.net/weixin_43834401/article/details/130670792Nginx下载地址:https://nginx.org/en/download.html第三方模块下载地址:https://github.com/......
  • 单元测试中如何Mock HttpContext
    最近团队有小伙伴问在单元测试中如何MockHttpContext.这是一个好问题,整理了一个实现方案分享给大家。在C#中,尤其是在单元测试场景下,模拟(Mocking)HttpContext是一种常见的做法。这允许我们在没有实际HTTP请求的情况下测试与HTTP上下文相关的代码。为了模拟HttpContext,我们通常......
  • nuxt3:http请求时需要注意得一些地方
    前言nuxt3中获取后端数据总共有三个方法:useFetch()$fetch()useAsynData()本篇教程就针对这三个方法的使用注意事项做一个记录正文通过useFetch()方法请求这个动作,在首次加载时,只在服务端执行一次,客户端是不执行得,客户端是直接使用拿到的数据地;如果和SEO无关得数据,优先......
  • [转帖]ORA-01450 maximum key length (3215) exceeded
    一、问题背景给一个业务表online建索引时遇到了ORA-01450maximumkeylength(3215)exceeded报错,看字面意思是字段太长了,检查表字段类型发现基本都是nvarchar2(2000),有些字段(例如unit)明显是不需要这么长的,表的设计有问题,联系开发按实际需求改短后能正常创建。奇怪的是表的......