[调优]-Feign配合Ok Http连接池

这篇具有很好参考价值的文章主要介绍了[调优]-Feign配合Ok Http连接池。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HTTP 连接池

在HTTP 通信的过程中,建立连接是一个很复杂的过程,涉及到多个数据包的交换,很耗时间,而且HTTP连接需要3次握手和4次挥手开销都很大。这时可以采用HTTP连接池,节约大量的3次握手4次挥手时间,提升吞吐量。

默认的HttpURLConnection是JDK自带的,并不支持连接池,如果要实现连接池的机制,还需要自己来管理连接对象。

HttpClient 相比传统JDK自带的HttpURLConnection,它封装了访问HTTP的请求头,参数,内容体,响应等等。它不仅使客户端发送HTTP请求变得容易,而且也方便了开发人员测试接口(基于HTTP协议的),既提高了开发的效率,又提高了代码的健壮性。另外高并发大量的请求网络的时候,也是用"连接池"提升吞吐量。

OkHttp作为后期之秀,功能和性能上,可能稍优于HttpClient ,但是几乎没多大区别,实际使用时,都是可以的,不过HttpClient集成起来更方便。

Feign 如何发送请求

在之前文档中,可以了解到,Feign 是集成了其他HTTP 客户端框架进行请求发送。

实际发送请求是由Feign 中的Client接口实现类去处理的,默认使用的是Defalut 类,该类使用的是HttpURLConnection。 Feign 对其他HTTP 客户端框架有支持,比如常用的有Ok Http、Apache Http Client。

[调优]-Feign配合Ok Http连接池

 文章来源地址https://www.toymoban.com/news/detail-425929.html

Feign集成Ok Http
1. 添加okhttp 依赖
直接添加okhttp :

        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-okhttp</artifactId>
        </dependency>

可以看到当前使用的是3.14.9版本:

在feign-okhttp-10.12.jar 中,提供了Client 的实现类,可以看到,执行请求时,使用的是OkHttp 中的API。


2. 添加配置
要开启OkHttp ,还需要在YML 中添加开启配置项,默认是关闭的:

feign:
  okhttp:
    enabled: true
 

然后重新启动程序,进入Debug 模式,可以看到最终请求是由OkHttp 发送,集成成功。


3. 连接池配置
在配置Feign 的时候,可以看到httpclient默认提供了配置项,但是OkHttp 并没有默认配置项。

在使用Spring 时,可以通过@Bean声明这些配置,在实际项目中,应该把这些配置项写在配置类中。

@Configuration
public class OkHttpConfig {

    /**
     * 忽略证书校验
     *
     * @return 证书信任管理器
     */
    @Bean
    public X509TrustManager x509TrustManager() {
        return new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
        };
    }

    /**
     * 信任所有 SSL 证书
     *
     * @return
     */
    @Bean
    public SSLSocketFactory sslSocketFactory() {
        try {
            TrustManager[] trustManagers = new TrustManager[]{x509TrustManager()};
            SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustManagers, new SecureRandom());
            return sslContext.getSocketFactory();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 连接池配置
     *
     * @return 连接池
     */
    @Bean
    public ConnectionPool pool() {
        // 最大连接数、连接存活时间、存活时间单位(分钟)
        return new ConnectionPool(200, 5, TimeUnit.MINUTES);
    }

    /**
     * OkHttp 客户端配置
     *
     * @return OkHttp 客户端配
     */
    @Bean
    public OkHttpClient okHttpClient() {
        return new OkHttpClient.Builder()
                .sslSocketFactory(sslSocketFactory(), x509TrustManager())
                .hostnameVerifier(hostnameVerifier())
                .retryOnConnectionFailure(false)    //是否开启缓存
                .connectionPool(pool())             //连接池
                .connectTimeout(15L, TimeUnit.SECONDS) // 连接超时时间
                .readTimeout(15L, TimeUnit.SECONDS) // 读取超时时间
                .followRedirects(true) // 是否允许重定向
                .build();
    }

    /**
     * 信任所有主机名
     *
     * @return 主机名校验
     */
    @Bean
    public HostnameVerifier hostnameVerifier() {
        return (s, sslSession) -> true;
    }
}


启动项目,Dubug 到OkHttpClient,可以看到,配置生效,连接池配置成功。


4. 简单测试
最后使用Jemeter 简单测试下,可以看到使用连接池后,吞吐量明显提升。

[调优]-Feign配合Ok Http连接池 

使用HttpURLConnection:

使用Okhttp + 连接池:

[调优]-Feign配合Ok Http连接池

 

到了这里,关于[调优]-Feign配合Ok Http连接池的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HTTPS安全连接的建立过程

    HTTP (Hypertext Transfer Protocol) 和 HTTPS (Hypertext Transfer Protocol Secure) 都是用于在 Web 浏览器和服务器之间传输数据的协议。它们之间的主要区别在于安全性。 HTTP 是一种不安全的协议,因为它在传输过程中不对数据进行加密。这意味着如果有人截取了数据包,就可以轻松地读取其中

    2024年02月15日
    浏览(62)
  • 建立和终止TCP连接过程

    http 和 https 区别: http 使用过程中存在安全性问题:http 使用明文通信,容易被窃听。由于 http 不验证通信方的身份,攻击者可以伪装成合法的通信方进行欺骗。并且 http 无法提供报文的完整性验证,因此报文有可能被篡改。 https 使用 SSL(Secure Sockets Layer) 或 TLS(Transport Layer

    2024年02月15日
    浏览(28)
  • TCP/IP客户端和服务器端建立通信过程

    使用Qt提供的类进行基于 TCP 的套接字通信需要用到两个类: QTcpServer 类用于监听客户端连接以及和客户端建立连接,在使用之前先介绍一下这个类提供的一些常用API函数: 构造函数 给监听的套接字设置监听 listen() 函数 在代码中 通过启动监听按钮 设置监听 参数: address :

    2024年02月07日
    浏览(49)
  • [chatgpt]关于openssl建立安全连接过程问答

    openssl建立安全连接的原理和过程? OpenSSL是一个开源的、功能强大的加密库,其可以为压缩包压缩和加密、为网络连接提供安全性等提供支持。既可以应用于客户端,也可以应用于服务器端。 OpenSSL建立安全连接的原理和过程如下: 1. 服务端创建公钥和私钥,并将公钥发布到全

    2024年01月19日
    浏览(29)
  • 简述TCP/IP建立连接过程(附流程和代码)

    前言: TCP/IP 定义了计算机操作系统如何连入互联网,以及数据传输的标准。 TCP和IP是属于不同协议栈层的,只是这两个协议属于协议族里最重要的协议,所以协议栈或者模型以之命名了。 本段转载C语言中文网:TCP/IP 不是指一个协议,也不是 TCP 和 IP 这两个协议的合称,而

    2024年02月04日
    浏览(81)
  • 实战 OSPF建立连接的过程7中状态?通俗易懂

    【OSPF的邻居状态有7种】 Down--Init--2-Way--Exstart--Exchange--Loading--Full OSPF邻居建立过程:A---B之间建立连接。 这里假设A的router ID为172.16.1.1,B的172.16.1.2  1.首先当双方没有开始建立关系之前,双方的状态为 DOWN 2.如下图,路由A想要和B建立关系,首先A会发送Hello报文(报文里面包含

    2024年02月09日
    浏览(27)
  • TCP,SSL以及HTTPS的连接建立过程详解

    可以参考B站的一个视频,把TLS/SSL的连接建立过程降解的非常透彻。配合这篇博客食用更佳。一遍不懂请多看几遍,很有用! 1 说明 1.1 对称加密的和非对称加密 在数字加密算法中,通过可划分为对称加密和非对称加密。 什么是对称加密? 在对称加密算法中,加密和解密使用

    2024年04月09日
    浏览(58)
  • “已成功与服务器建立连接,但是在登录过程中发生错误“的解决方法

    对于上述问题,我也曾被折磨得不轻。 网上找了很多方法,很多就是每个屁用! 别轻易就重新注册一个新的,否则后面可能还需要花时间去把它删了。 首先,我们会看到连接成功但是登陆不上的报错图。  电脑不同,可能也会有所不同。但大致内容就是上述那样。 方法一:

    2024年02月06日
    浏览(118)
  • 微服务springcloud 06.feign框架,配合ribbon 负载均衡和重试,配合hystrix 降级,监控和熔断测试

    feign是ribbon +hystrix 的整合 01.新建 sp09-feign 项目 第一步: 第二步:选择依赖: pom.xml 需要添加 sp01-commons 依赖: 第三步:修改sp09-feign项目的application.yml 第四步:sp09-feign的主程序添加 @EnableDiscoveryClient 和 @EnableFeignClients 02.feign 声明式客户端 第一步:声明三个代理接口 这里的

    2024年02月10日
    浏览(40)
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接

    Flurl.Http-3.2.4 升级到 4.0.0 版本后,https请求异常:Call failed. The SSL connection could not be established. 如下图: Flurl.Http-3.2.4版本绕过https的代码,对于 Flurl.Http-4.0.0 版本来说方法不再适用, 3.2.4及4.0.0版本绕过https代码成果在文章最后有展示 。 查看了Flurl.Http4.0的文档,地址:Configu

    2024年01月19日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包