pub struct SharedHttpClient { /* private fields */ }Expand description
A hot-reloadable, middleware-stacked outbound HTTP client shared by
consumer adapters. Clone-cheap (ArcSwap inner); callers reach the
current stack through SharedHttpClient::client.
Streaming (SSE) subscription forwards reach for
SharedHttpClient::stream_client: a client derived from the same
config minus the total request timeout (connect + read timeouts
intact; FWD-15) — a healthy subscription longer than 30 s must
survive, and
reqwest 0.13’s per-request override can lengthen but never clear a
client-level total timeout. Both rebuild-and-swap together so a
reload can never pair one’s config with the other’s transport
(FWD-12).
Implementations§
Sourcepub fn new(config: HttpClientConfig) -> Result<Self, HttpClientBuildError>
pub fn new(config: HttpClientConfig) -> Result<Self, HttpClientBuildError>
Build a shared client. Blocks only on the (small) PEM reads when
ca_bundle/client_cert are configured — this is one-shot
construction wiring at assembly time, never a per-request or
hot-reload path; use SharedHttpClient::reload for async
rebuilds.
Sourcepub fn client(&self) -> Arc<ClientWithMiddleware> ⓘ
pub fn client(&self) -> Arc<ClientWithMiddleware> ⓘ
The current middleware-stacked client for request/response
forwarding. Every call loads the latest stack — after a
reload, new requests ride the rebuilt client.
Sourcepub fn stream_client(&self) -> Arc<ClientWithMiddleware> ⓘ
pub fn stream_client(&self) -> Arc<ClientWithMiddleware> ⓘ
The current middleware-stacked client for streaming (SSE)
subscription forwards: built from the same config with the total
request timeout removed and the connect + read timeouts retained
(FWD-15 — a subscription is unbounded in time by contract,
alkcall ADR-021; the read timeout remains the stall guard).
Swapped atomically with client (FWD-12).
Sourcepub fn config(&self) -> Arc<HttpClientConfig> ⓘ
pub fn config(&self) -> Arc<HttpClientConfig> ⓘ
The config the current clients were built from (swapped together with them; FWD-12).
Sourcepub async fn reload(
&self,
config: HttpClientConfig,
) -> Result<(), HttpClientBuildError>
pub async fn reload( &self, config: HttpClientConfig, ) -> Result<(), HttpClientBuildError>
Rebuild the underlying clients and swap them in for new callers
(in-flight requests complete on the previous clients). PEM reads
use tokio::fs, so this is safe to call from async contexts
without blocking a worker. Clients and config swap together in a
single atomic store (FWD-12).