休息模板 org.apache.http.NoHttpResponseException

2024-02-15

我有两个 Spring Boot 服务 A 和 B。还有一个外部服务 C。 这是请求路径:

Web 浏览器 服务 A 服务 B 外部服务 C

外部服务正在返回返回到前端的资源。对于 A、B 和 C 之间的通信,我使用 Rest Template。 进入 Web 应用程序时一切正常,但一旦我运行并行运行的 BDD 测试(9 个线程),我在调用外部服务 C 时就会在服务 B 中收到 NoHttpResponseException。

org.apache.http.NoHttpResponseException Service_C failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)

这是我的休息模板配置:

    @Bean
public RestTemplate restTemplateExternal() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
    HttpComponentsClientHttpRequestFactory requestFactory = getRequestFactoryWithDisabledSSLValidation();
    RestTemplate restTemplate = new RestTemplate(requestFactory);

    return restTemplate;
}

private HttpComponentsClientHttpRequestFactory getRequestFactoryWithDisabledSSLValidation() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
    TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;

    SSLContext sslContext = SSLContexts.custom()
            .loadTrustMaterial(null, acceptingTrustStrategy)
            .build();

    SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);

    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();

    CloseableHttpClient httpClient = HttpClients.custom()
            .setConnectionManager(connectionManager)
            .setSSLSocketFactory(csf)
            .build();

    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();

    requestFactory.setHttpClient(httpClient);

    return requestFactory;
}

我已经尝试打电话了connectionManager.setValidateAfterInactivity(0);但这没有帮助。

让我补充一下,从服务 B 到外部服务 C 的所有请求都发送到同一端点。只有参数 (x) 发生变化:/resource?param={x}

老实说,我不能 100% 确定是否会在每次服务请求时创建 HttpClient(RestTemplate bean 是 Singleton),还是每个服务只有一个实例?

也许我需要在连接管理器中“setDefaultMaxPerRoute”?如果是,那么我如何区分正确的数字?我真的很感激关于如何在这种情况下正确配置 RestTemplate 的简短描述。


看起来这里有一个类似的问题:获取 NoHttpResponseException 进行负载测试 https://stackoverflow.com/questions/10570672/get-nohttpresponseexception-for-load-testing

尝试过clientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(3, true));结果成功了。如果有人能更深入地解释这个问题,我仍然会很感激。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

休息模板 org.apache.http.NoHttpResponseException 的相关文章

  • 合并两个 Jasper 报告

    我有一个带有下拉菜单的网络应用程序 用户可以从中选择报告可视化的类型 报告 1 报告 2 报告 3 等 根据所选的报告 Jasper 报告将在服务器上编译并以 PDF 格式的弹出窗口打开 在服务器端 我使用下面的代码以单独的方法实现每个报告
  • 使用translateX()和translateY()时,窗格布局内的JavaFX文本与其他元素重叠

    下图是对正在发生的情况的描述 我有一个Pane其中包含一个Text我正在使用下面的代码来制作marquee like effect of the Text 所以当Pane没有足够的空间来显示文本 动画正在开始 文本必须来回移动 以便用户可以
  • 这是重载,不同类中具有相同名称和不同签名的方法吗?

    如果我有以下 Java 代码 class A public int add int a int b return a b class B extends A public float add float a float b return a
  • 如何在 Java 中从任意基数转换为基数 10

    我是 Java 新手 我想编写一个程序 仅使用算术运算将基数 2 3 4 5 6 7 8 9 16 转换为基数 10 我已经完成了从键盘读取字符串 如果数字是十六进制 并将其转换为整数 之后我做了一个 while 循环 将数字分割为数字并将
  • 如何从c调用Java函数

    我被这个问题困扰了 我需要从 c c 调用 Java 函数 在示例和教程中 我只看到一个java应用程序调用一个c方法 并在同一个方法中调用另一个java方法 但我想做的是从代码的任何部分调用java方法 这就是我所拥有的 static J
  • android listviews:页眉和页脚视图

    在我的 ListActivity 中 我需要页眉和页脚视图 位于列表的顶部和底部 分别用作列表上的上一页和下一页按钮 因为我只想一次仅显示 20 个项目 我通过执行以下操作来设置头视图和脚视图 getListView addHeaderVi
  • 从 QueryDSL 谓词对象中获取参数

    我使用带有 Spring REST 端点的 QueryDSL 谓词对象来检索和查询参数值 GetMapping subjectId students RolesAllowed Roles PLATFORM ADMIN Roles USER
  • Java中如何存储profile?

    我仍在学习 Java 的诀窍 如果有一个明显的答案 我很抱歉 我有一个占用大量内存的程序 我想找到一种方法来减少其使用 但是在阅读了许多 SO 问题后 我认为在开始优化它之前我需要证明问题出在哪里 这就是我所做的 我在程序的开头添加了一个断
  • 在使用 Selenium 和 java 时在网格中应用过滤器后无法选择第一行[棘手的情况]

    我遇到了这种奇怪的情况 找了好久都没有成功 请问这是怎么回事 让我给你解释一下 我正在尝试在网页中创建自动化 我必须输入 动态表中的特定值以及执行 ENTER 事件后 需要选择显示的第一行 运行我的代码后 我得到了这个 但显示的行未被选择
  • 如何在 Java 中通过 TLS v.1.2 创建安全的 TCP 连接

    我想通过 TLS v1 2 在两个系统之间创建通信 其中包含的信息是保密的 我想避免 https Web 服务调用 而直接想在 TCP 层执行消息交换 您能否建议如何实现此功能 以便我可以通过 TLS v1 2 安全地传输数据 EDIT 阅
  • 计算两个 Java 日期实例之间的差异

    我正在使用Java的java util DateScala 中的类并想要比较Date对象和当前时间 我知道我可以使用 getTime 计算增量 new java util Date getTime oldDate getTime 然而 这只
  • 将 PFX 文件导入现有 JKS 文件(不从 .pfx 转换为 .jks)

    我有 Java Web 服务 并使用 Java Keytool 创建的 jks 文件实现了 X 509 keytool genkey keyalg RSA sigalg SHA1withRSA validity 730 alias myse
  • 为什么Java不支持C中的clrscr这样的函数?

    我有一个问题 对很多人来说可能听起来很愚蠢 但我不能停下来把它发布在这里 因为在互联网上找不到任何东西 为什么java没有我们在C中使用的clrscr之类的函数 如果我创建了一个基于用户输入反复迭代的 java 控制台应用程序 然后如果我想
  • 基本的 Swing 库? JGoodies,JFreeChart [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 什么是对象发布以及为什么我们需要它?

    在一次 Java 开发人员面试中 我被问到一个问题 什么是对象发布以及为什么我们需要它 我不确定我知道正确的答案 我认为对象发布是指将对象 变量 状态放入堆内存中 线程之间共享对象 变量 需要它 我对吗 如果我错了 请纠正我 我一直在搜索
  • 如何将报告导出为 PDF/A-1a、PDF/A-1b?

    在 jasper report 中生成 PDF A 包含许多陷阱 并且某些版本的 jasper report 不支持 这就是为什么我决定通过这个Question Answer 帖子 指示将带有图表的简单报告导出为 PDF A 所需的步骤和库
  • Android 折叠工具栏在折叠时没有隐藏其他元素

    我在 Android 上有一个布局 支持设计折叠工具栏 其中包含 TextView 但是当我折叠工具栏时 一些带有工具栏标题的 TextView 我想隐藏所有其他内容 而不是工具栏和标题 这是我的布局
  • Java ReentrantReadWriteLocks - 如何在读锁中安全地获取写锁?

    我现在在我的代码中使用可重入读写锁 http java sun com javase 6 docs api java util concurrent locks ReentrantReadWriteLock html同步对树状结构的访问 这
  • XStream:xstream 1.3.1 中具有属性和文本节点的节点?

    我想使用 XStream 将对象序列化为这种形式的 XML
  • JavaFX - 当文本字段具有焦点时加速器不工作

    在我的应用程序中 我有一个使用加速器的屏幕 我正在使用功能键 F3 在我的应用程序中执行操作 它每次都工作正常 但是当我单击此屏幕上的任何文本字段时 功能键不会执行 这是我设置加速器的代码 scene getAccelerators put

随机推荐