ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 无法在Camel HTTP组件中配置“Keep Alive”

2019-07-11 08:02:53  阅读:367  来源: 互联网

标签:java sockets apache-camel


我正在为HTTP组件的正确设置遇到一些麻烦.目前,微服务从提供商处提取JSON内容,处理它并将其发送到下一个服务以进行进一步处理.主要问题是这个微服务创建了大量的CLOSE_WAIT套接字连接.我知道“KEEP-ALIVE”的整个概念应保持连接打开,直到我关闭它,但服务器可能会因某些原因丢弃连接并创建此CLOSE_WAIT套接字.

我已经创建了一个用于调试/测试目的的小型服务,它可以向Google发送GET调用,但即使这个连接保持打开状态,直到我关闭程序.我尝试了很多不同的解决方案:

> .setHeader(“连接”,常量(“关闭”))
> -Dhttp.keepAlive = false作为VM参数
>从Camel-Http切换到Camel-Http4
> httpClient.soTimeout = 500(Camel-HTTP),httpClient.socketTimeout = 500和connectionTimeToLive = 500(Camel-HTTP4)
> .setHeader(“Connection”,simple(“Keep-Alive”))和
.setHeader(“Keep-Alive”,simple(“timeout = 10”))(Camel-HTTP4)
>设置通过调试DefaultConnectionKeepAliveStrategy的响应从-1(永不结束)到Camel-HTTP4中的特定值 – 这有效,但我无法注入自己的策略.

但我没有成功.所以也许你们中的一个可以帮助我:

>我如何告诉Camel-HTTP它应该在特定时间过后关闭连接?例如,该服务每小时从内容提供商处提取. 3-4小时后,HttpComponent应在拉动后关闭连接,并在下一次拉动时重新打开.目前,每个连接都将被放回MultiThreadedHttpConnectionManager,并且套接字仍处于打开状态.
>如果使用Camel-HTTP无法做到这一点:我如何在创建路线时注入HttpClientBuilder?我知道应该可以通过httpClient选项,但我不明白文档的特定部分.

感谢大家的帮助

解决方法:

您可以将自己的clientConnectionManager提供给HTTP4.通常,您应该使用org.apache.http.impl.conn.PoolingHttpClientConnectionManager的实例,您可以使用自己的org.apache.http.config.SocketConfig将其配置为连接管理器的setDefaultSocketConfig方法.

如果您使用Spring with Java config,那么您将拥有一个方法:

@Bean
PoolingHttpClientConnectionManager connectionManager() {
    SocketConfig socketConfig = SocketConfig.custom()
            .setSoKeepAlive(false)
            .setSoReuseAddress(true)
            .build();
    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
    connectionManager.setDefaultSocketConfig(socketConfig);
    return connectionManager;
}

然后你只需在端点定义中使用它,如下所示:clientConnectionManager = #connectionManager

标签:java,sockets,apache-camel
来源: https://codeday.me/bug/20190711/1430225.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有