httpclient

ASP.Net Core2.1中的HttpClientFactory系列一:HttpClient的缺陷

百般思念 提交于 2020-04-24 06:38:08
引言:   ASP.NET Core2.1 中出现了一个新的 HttpClientFactory 功能, 它有助于解决开发人员在使用 HttpClient 实例从其应用程序中访问外部 web 资源时可能遇到的一些常见问题。关于HttpClientFactory 到底解决了那些HttpClient的严重问题,下面是我罗列出来的(原文来自于:https://www.infoq.com/news/2016/09/HttpClient)   (1)在处理HttpClient对象的时候不会立即关闭socket。   (2)太多的实例影响性能   (3)单例的HttpClient或者共享HttpClient实例,不遵守DNS 生存时间 (TTL) 设置。(这个问题我也不太明白,具体怎么重现这个问题,我下去再研究研究。) HttpClientFactory这个小可爱,解决了上面的所有问题,他也是ASP.NET Core2.1最新特点之一,下面详细聊聊HttpClient存在的这些问题。 一、HttpClient存在的问题   由于设计错误、bug 和文档不正确等因素, 导致在.Net中正确使用HttpClient 出奇的难。因此, 在生产环境中看起来正常工作的应用程序可能会在负载大的情况下产生性能和运行时故障的问题。   为了理解我们为什么遇到这种情况, 我们首先要看另一个面向连接的类:

Spring Cloud Gateway 系列(二)处理请求流程

北城以北 提交于 2020-04-24 02:14:28
本篇文章主要从源码的角度揭秘Spring Cloud Gateway的加载和怎么处理请求流程。 1.Spring Gateway概述 SpringCloudGateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。 2.容器启动过程的简单加载分析 加载的流程主要是spring容器为主,需要大家熟悉spring框架,这里不做过多的分析了。 Spring Cloud Gateway自动装配类在 org.springframework.cloud.gateway.config 包下,我们可以看到四个配置类 : GatewayAutoConfiguration GatewayClassPathWarningAutoConfiguration GatewayLoadBalancerClientAutoConfiguration GatewayRedisAutoConfiguration

Spring Boot Reactor Netty配置

百般思念 提交于 2020-04-23 15:29:04
什么是Reactor Netty? 在开始之前,让我们看一下Reactor Netty是什么以及它与Spring Boot的关系。 Reactor Netty是一个异步事件驱动的网络应用程序框架。它提供非阻塞和背压就绪的TCP,HTTP和UDP客户端和服务器。顾名思义,它基于Netty框架。 现在,让我们看看Spring和Spring Boot的位置。 Spring WebFlux 是Spring框架的一部分,为Web应用程序提供反应式编程支持。如果我们在Spring Boot应用程序中使用WebFlux,Spring Boot会 自动将 Reactor Netty 配置为默认服务器。除此之外,我们可以明确地将Reactor Netty添加到我们的项目中,Spring Boot应该再次自动配置它。 现在,我们将构建一个应用程序来了解如何自定义我们自动配置的Reactor Netty服务器。之后,我们将介绍一些常见的配置方案。 首先,我们将添加所需的Maven依赖项。 要使用Reactor Netty服务器,我们将在我们的pom文件中添加 spring-boot-starter-webflux 作为依赖项: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter

每个人都要学的图片压缩终极奥义,有效解决 Android 程序 OOM

蹲街弑〆低调 提交于 2020-04-23 08:10:40
由来 在我们编写 Android 程序的时候,几乎永远逃避不了图片压缩的难题。除了应用图标之外,我们所要显示的图片基本上只有两个来源: 来自网络下载 本地相册中加载 不管是网上下载下来的也好,还是从系统图片库中读取的图片,都有一个相同的特点:像素一帮较高。同时我们都知道, Android 系统分配给我们每个应用的内存是有限的,由于解析、加载一张图片,需要占用的内存大小,是远大于图片自身大小的。所以,这时程序就可能因为占用了过多的内存,从而出现 OOM 现象。那么什么是 OOM 呢? Exception java.lang.OutOfMemoryError: Failed to allocate a 916 byte allocation with 8388608 free bytes and 369MB until OOM; failed due to fragmentation (required continguous free 65536 bytes for a new buffer where largest contiguous free 32768 bytes) java.nio.CharBuffer.allocate (CharBuffer.java:54) java.nio.charset.CharsetDecoder.allocateMore

.NET Core 迁移躺坑记续集--Win下莫名其妙的超时

自古美人都是妖i 提交于 2020-04-22 08:58:53
继 上一集 里说到遇到的各种问题并且弄了n个解决方案之后,特别是对于问题4的解决方案对于切换了HttpClientFactory 我用了你家netcore 2.1下专门解决之前HttpClient口病已久的灵丹妙药了,信心满满的上线…..然后挂了,该超时的继续超 其中这个问题比较诡异在于超时的主要集中在两台机器上(俗称两兄弟了) 由于不明真相到底是什么导致的,而且接下来又要到五一了,为了欢度五一这么一个伟大艰巨的任务,为了证明迁移core的伟大光荣正确,怎么也要解决掉这个问题 步骤一,先确认问题的复现 首先直接放弃在任何测试环境复现的想法,因为之前在测试HttpClientFactory的时候已经在测试环境里进行过多批次各种场景的压测,无论是长时低压,长时高压,短时高压都进行过都没发生过 而且就算是线上也就2台机器有问题 所以让运维提供ip,指向到这台服务器后,使用superbenchmarker对其进行压测 压测中发现这个….很稳定 稳定5分钟,挂个2分钟 绿色线为RPS每秒请求数,紫色是请求响应时间,发现绿色线稳定5分钟后,会突然没有了(请求卡住了),等个2分钟后突然紫色线突然冒个刺(等待已久的请求终于响应了)然后绿色线又起来了(请求恢复正常) 步骤二,确认超时的时候发生了什么 第二天,开好压测,因为确认了每5分钟后会超时2分钟这个时间,等着个四分钟左右跑到运维那坐着

HttpClientFactory的套路,你知多少?

╄→гoц情女王★ 提交于 2020-04-21 06:54:10
背景 ASP.NET Core 在 2.1 之后推出了具有弹性 HTTP 请求能力的 HttpClient 工厂类 HttpClientFactory。 替换的初衷还是简单摆一下: ① using(var client = new HttpClient()) 调用的 Dispose() 方法并不会立即释放底层 Socket 连接,新建 Socket 需要时间,导致在高并发场景下 Socket 耗尽。 ② 基于 ① 很多人会想到使用单例或者静态类构造 HttpClient 实例,但是这里有一个坑,HttpClient 不会反应 DNS 的变更。 HttpClientFactory 以模块化、可命名、可配置、弹性方式重建了 HttpClient 的使用方式: 由 DI 框架注入 IHttpClientFactory 工厂;由工厂创建 HttpClient 并从内部的 Handler 池分配请求 Handler。 HttpClient 可在 DI 框架中通过 IHttpCLientBuilder 对象配置 Policy 策略。 我一直对这种颠覆传统 HttpClient 的代码组织方式感到好奇,今天我们带着问题来探究一下新版 HttpClient 的实现。 与码无瓜 一个完整的 HttpClient 包括三部分: 基础业务配置: BaseAddress

.NET Core 中正确使用 HttpClient 的姿势

怎甘沉沦 提交于 2020-04-21 06:53:11
为了更方便在服务端调用 HTTP 请求,微软在 .NET Framework 4.x 的时候引入了 HttpClient。但 HttpClient 有很多严重问题,一直饱受诟病,比如 InfoQ 的这篇文章 t.cn/Evzy80y ,吐槽了 HttpClient 不能立即关闭连接、性能消耗严重等的问题。 .NET Core 2.1 开始引入的 HttpClientFactory 解决了 HttpClient 的所有痛点。有了 HttpClientFactory,我们不需要关心如何创建 HttpClient,又如何释放它。通过它可以创建具有特定业务的 HttpClient,而且可以很友好的和 DI 容器结合使用,更为灵活。下面以 ASP.NET Core 为例介绍 HttpClient 新的三种正确使用方式。 一、直接使用方式 不管是哪种方式,都要先注册服务,对于 ASP.NET Core 应用则是在 Startup.cs 文件的 ConfigureServices 添加如果代码: services.AddHttpClient(); 然后在 Controller 中通过构造注入的试获得 IHttpClientFactory ,然后通过它来创建 HttpClient 对象。示例代码: public class ValuesController : BaseController {

HttpClient在.NET Core中的正确打开方式

…衆ロ難τιáo~ 提交于 2020-04-21 05:21:07
问题来源 长期以来,.NET开发者都通过下面的方式发送http请求: using (var httpClient = new HttpClient()) { var response = await httpClient.GetAsync(uri); //do something with response } 这段代码理论上来说遵守了C#的最佳实践,HttpClient是IDisposable类型,所以我们通过using语法糖来使用HttpClient。微软官方的文档也提到: As a rule, when you use an IDisposable object, you should declare and instantiate it in a using statement 可是,当我们试图运行下面的测试: public async Task SendRequest() { Console.WriteLine("Starting reqeust"); for(int i = 0; i<10; i++) { using(var client = new HttpClient()) { var result = await client.GetAsync("http://www.baidu.com"); Console.WriteLine(result.StatusCode

spring cloud gateway的NettyConfiguration

时光毁灭记忆、已成空白 提交于 2020-04-21 02:28:16
本文主要研究下spring cloud gateway的NettyConfiguration NettyConfiguration @Configuration @ConditionalOnProperty ( name = "spring.cloud.gateway.enabled" , matchIfMissing = true ) @EnableConfigurationProperties @AutoConfigureBefore ( HttpHandlerAutoConfiguration . class ) @AutoConfigureAfter ( { GatewayLoadBalancerClientAutoConfiguration . class , GatewayClassPathWarningAutoConfiguration . class } ) @ConditionalOnClass ( DispatcherHandler . class ) public class GatewayAutoConfiguration { @Configuration @ConditionalOnClass ( HttpClient . class ) protected static class NettyConfiguration { @Bean

三、接口测试教程-jmeter

岁酱吖の 提交于 2020-04-20 18:28:05
1:接口测试介绍 2:接口测试与协议 http协议、webservice(soap)协议、自定义协议 3:接口测试流程 参数化:EXCEL文件参数化、数据库参数化、直接代码中配置、配置文件 预处理请求(前置处理):对请求的参数进行预处理、准备。如加密数据,组织测试数据 请求:httpclient、wsclient、rpcclient等等client 对响应进行处理(后置处理):解析响应,得到目标字段,处理json、xml等数据格式的内容,提取数据。 断言:目的是判断是否符合业务需求,将提取的数据与期望值进行比较,判断是否符合正常结果。 测试报告:各种统计数据,测试用例是否执行成功,是否出现错误,哪些测试用例出现错误。 4:测试用例之间的关系: 测试用例A==下一个测试用例B 两个测试用例的依赖关系:A为B测试用例提供数据,A执行完毕B测试用例才执行 A->B->C->D.....................->Z 5:接口测试与性能测试 6:接口测试与APP测试 7:接口测试:自定义协议测试 8:接口测试与回归测试 9:自动化执行用例 jenkins定时任务,让测试用例自动执行出报告 来源: oschina 链接: https://my.oschina.net/u/4267017/blog/3285617