요구사항: 마이크로서비스 아키텍처에서 서비스 간 호출은 종종 HTTP 프로토콜을 사용하며, 보통 HTTP 요청을 할 때 HttpClient 클래스를 사용합니다Refit.HttpClientFactory, WebApiClientCoreHttpClient 캡슐화를 기반으로 한 서드파티 라이브러리.
HttpClient 사용에 관한 자세한 내용은 다음을 참고하시기 바랍니다:하이퍼링크 로그인이 보입니다.
HttpClient 소스 코드:하이퍼링크 로그인이 보입니다.
HttpClient 매개변수 없는 생성자에서는 HttpClientHandler 객체가 기본적으로 인스턴스화되며, HttpClientHandler는 HttpMessageHandler 추상 클래스를 상속하여 구현합니다.기본 흐름: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
소스 코드 분석에 따르면, HttpMessageHandler로부터 상속받은 객체는 HTTP 요청을 보내는 HttpClient의 구체적 구현입니다. HttpClient는HttpRequestMessage객체는 전달되고 다시 받아들여집니다HttpResponseMessage객체는 콘텐츠를 반환합니다.
새로운 TestHttpHandler 클래스를 생성하고, HttpMessageHandler 추상화 클래스를 상속받아 SendAsync 메서드를 구현한 뒤, HttpClient 생성자에서 다음과 같은 코드를 사용해 인스턴스화해 보세요:
아래에 나와 있습니다:
HttpClient를 호출해 GET 요청을 보내지만, SendAsync 메서드의 특정 구현은 HTTP 요청을 보내지 않으며, 네트워크 흐름도 없으므로네트워크 케이블을 뽑으면 프로그램이 정상적으로 작동합니다。
에HttpClient 객체를 사용할 때, 기본 소켓이 즉시 해제되지 않습니다, 이로 인해 소켓 소진 문제가 발생할 수 있습니다. Microsoft는 이 문제를 인지하고 있으며, ASP.NET Core 프로젝트에서 HttpClient 객체를 생성하기 위해 IHttpClientFactory를 사용할 것을 권장합니다.IHttpClientFactory는 자원 소비를 줄이기 위해 공장에서 생성된 HttpMessageHandler 인스턴스를 풀로 풀링합니다. 새로운 HttpClient 인스턴스를 만들 때, 풀에서 HttpMessageHandler 인스턴스를 재사용할 수 있습니다(생존 기간이 만료되지 않은 경우).
.NET용 IHttpClientFactory:하이퍼링크 로그인이 보입니다.
ASP.NET 코어는 파이프라인 미들웨어 개념을 가지고 있습니다.실제로 HttpClient는 Delegating Handler의 도움을 받아 파이프라인 미들웨어 개념도 가지고 있습니다, 아래 그림에서 볼 수 있습니다:
이 기능을 사용하면 요청과 응답을 가로챌 수 있으며, 요청 전 토큰 인증 증가, 요청 및 응답에 소요되는 시간 기록, 응답 데이터 래핑 등이 가능합니다.
DelegatingHandler 클래스를 상속하고 SendAsync 메서드를 덮어쓰면 됩니다.
HTTP 요청을 기록하는 데는 시간이 걸리며, 코드는 다음과 같습니다:
아래 이미지에 보이는 대로 IHttpClientFactory에 전화해 HttpClient를 만들고 요청을 보내세요:
(끝)
|