Requisiti: Nelle architetture dei microservizi, le chiamate tra servizi spesso utilizzano il protocollo HTTP, di solito la classe HttpClient per effettuare richieste HTTP o utilizzarlaRefit.HttpClientFactory、WebApiClientCoreLibrerie di terze parti basate sull'incapsulamento HttpClient.
Per maggiori informazioni sull'uso di HttpClient, si prega di consultare:Il login del link ipertestuale è visibile.
Codice sorgente HttpClient:Il login del link ipertestuale è visibile.
Nel costruttore senza parametri HttpClient, l'oggetto HttpClientHandler viene istanziato di default, e l'HttpClientHandler eredita e implementa la classe astratta HttpMessageHandler.Flusso predefinito: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
Secondo l'analisi del codice sorgente, l'oggetto ereditato dall'HttpMessageHandler è un'implementazione concreta dell'HttpClient che invia richieste HTTP. HttpClientHttpRequestMessageL'oggetto viene passato e poi ricevutoHttpResponseMessageL'oggetto restituisce contenuto.
Prova a creare una nuova classe TestHttpHandler, ereditare la classe di astrazione HttpMessageHandler e implementare il metodo SendAsync, per poi istanziarla nel costruttore HttpClient, con il seguente codice:
Come mostrato di seguito:
Sebbene chiami HttpClient per inviare una richiesta GET, l'implementazione specifica del metodo SendAsync non invia una richiesta HTTP e non c'è flusso di rete, quindiPuoi staccare il cavo di rete e il programma funzionerà normalmente。
aQuando si utilizza un oggetto HttpClient, il socket sottostante non viene rilasciato immediatamente, che può causare problemi di esaurimento della cava. Microsoft è consapevole di questo problema e raccomanda l'uso di IHttpClientFactory nei progetti Core ASP.NET per creare oggetti HttpClient.IHttpClientFactory raggruppa istanze HttpMessageHandler create in fabbrica in un pool per ridurre il consumo di risorse. Quando crei una nuova istanza HttpClient, potresti riutilizzare l'istanza HttpMessageHandler nel pool(se il periodo di sopravvivenza non è scaduto).
IHttpClientFactory per .NET:Il login del link ipertestuale è visibile.
ASP.NET Core ha il concetto di middleware pipeline,Infatti, HttpClient ha anche il concetto di middleware pipeline con l'aiuto del Delegating Handler, come mostrato nella figura sottostante:
Utilizzando questa funzione, possiamo intercettare richieste e risposte, come aumentare l'autenticazione dei token prima delle richieste, registrare il tempo necessario per richieste e risposte, e incapsulare i dati delle risposte.
Basta ereditare la classe DelegatingHandler e sovrascrivere il metodo SendAsync.
La registrazione delle richieste HTTP richiede tempo, e il codice è il seguente:
Chiama IHttpClientFactory per creare un HttpClient e inviare una richiesta, come mostrato nell'immagine seguente:
(Fine)
|