Struct tower::balance::p2c::Balance[][src]

pub struct Balance<D, Req> where
    D: Discover,
    D::Key: Hash
{ /* fields omitted */ }
This is supported on crate feature balance only.

Efficiently distributes requests across an arbitrary number of services.

See the module-level documentation for details.

Note that Balance requires that the Discover you use is Unpin in order to implement Service. This is because it needs to be accessed from Service::poll_ready, which takes &mut self. You can achieve this easily by wrapping your Discover in Box::pin before you construct the Balance instance. For more details, see #319.


impl<D, Req> Balance<D, Req> where
    D: Discover,
    D::Key: Hash,
    D::Service: Service<Req>,
    <D::Service as Service<Req>>::Error: Into<BoxError>, 

pub fn new(discover: D) -> Self[src]

Constructs a load balancer that uses operating system entropy.

pub fn from_rng<R: Rng>(discover: D, rng: R) -> Result<Self, Error>[src]

Constructs a load balancer seeded with the provided random number generator.

pub fn len(&self) -> usize[src]

Returns the number of endpoints currently tracked by the balancer.

pub fn is_empty(&self) -> bool[src]

Returns whether or not the balancer is empty.

Trait Implementations

impl<D: Discover, Req> Debug for Balance<D, Req> where
    D: Debug,
    D::Key: Hash + Debug,
    D::Service: Debug,
    Req: Debug

impl<D, Req> Service<Req> for Balance<D, Req> where
    D: Discover + Unpin,
    D::Key: Hash + Clone,
    D::Error: Into<BoxError>,
    D::Service: Service<Req> + Load,
    <D::Service as Load>::Metric: Debug,
    <D::Service as Service<Req>>::Error: Into<BoxError>, 

type Response = <D::Service as Service<Req>>::Response

Responses given by the service.

type Error = BoxError

Errors produced by the service.

type Future = MapErr<<D::Service as Service<Req>>::Future, fn(_: <D::Service as Service<Req>>::Error) -> BoxError>

The future response value.

Auto Trait Implementations

impl<D, Req> !RefUnwindSafe for Balance<D, Req>

impl<D, Req> Send for Balance<D, Req> where
    D: Send,
    Req: Send,
    <D as Discover>::Key: Send,
    <D as Discover>::Service: Send

impl<D, Req> Sync for Balance<D, Req> where
    D: Sync,
    Req: Sync,
    <D as Discover>::Key: Sync,
    <D as Discover>::Service: Sync

impl<D, Req> Unpin for Balance<D, Req> where
    D: Unpin,
    Req: Unpin

impl<D, Req> !UnwindSafe for Balance<D, Req>

Blanket Implementations

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

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

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

impl<T> From<T> for T[src]

impl<T> Instrument for T[src]

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

impl<T, Request> ServiceExt<Request> for T where
    T: Service<Request> + ?Sized

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

type Error = Infallible

The type returned in the event of a conversion error.

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

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

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,