Skip to main content

LoadBalancer

Struct LoadBalancer 

Source
pub struct LoadBalancer { /* private fields */ }
Expand description

Top-level load balancer that manages backend groups keyed by service name.

Implementations§

Source§

impl LoadBalancer

Source

pub fn new() -> Self

Create an empty load balancer.

Source

pub fn register( &self, service: &str, addrs: Vec<SocketAddr>, strategy: LbStrategy, )

Register (or replace) a backend group for service.

Source

pub fn select(&self, service: &str) -> Option<Arc<Backend>>

Select a healthy backend for service, delegating to the group’s configured strategy.

Source

pub fn update_backends(&self, service: &str, addrs: Vec<SocketAddr>)

Update the backend list for service, preserving state for unchanged addresses.

Source

pub fn unregister(&self, service: &str)

Remove the backend group for service.

Source

pub fn add_backend(&self, service: &str, addr: SocketAddr)

Add a single backend to an existing group.

Source

pub fn remove_backend(&self, service: &str, addr: &SocketAddr)

Remove a single backend from an existing group.

Source

pub fn backend_count(&self, service: &str) -> usize

Return the number of backends registered for service, or 0 if the service is not registered.

Source

pub fn healthy_count(&self, service: &str) -> usize

Return the number of healthy backends for service, or 0 if the service is not registered.

Source

pub fn mark_health(&self, service: &str, addr: &SocketAddr, healthy: bool)

Update the health status of a specific backend in a service group.

If healthy is true, marks the backend healthy and resets its failure counter. Otherwise marks it unhealthy and records a failure.

Source

pub fn list_service_names(&self) -> Vec<String>

Return the list of registered service names.

Source

pub fn group_snapshot(&self, service: &str) -> Option<BackendGroupSnapshot>

Return a snapshot of a backend group’s state for a given service.

Each entry contains the backend address, health status, active connections, and the group’s strategy.

Source

pub fn spawn_health_checker( self: &Arc<Self>, interval: Duration, timeout: Duration, ) -> JoinHandle<()>

Spawn a background health-check task.

Every interval the task TCP-connects to every backend across all groups with a per-probe timeout. Concurrency is bounded to at most 64 simultaneous probes via a semaphore.

On success the backend is marked healthy and its failure counter is reset. On failure it is marked unhealthy and the failure counter is incremented.

§Panics

The spawned task panics if the internal concurrency semaphore is unexpectedly closed.

Trait Implementations§

Source§

impl Default for LoadBalancer

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more