pub struct HttpHealthCheck {
    pub consecutive_success: usize,
    pub consecutive_failure: usize,
    pub peer_template: HttpPeer,
    pub reuse_connection: bool,
    pub req: RequestHeader,
    pub validator: Option<Box<dyn Fn(&ResponseHeader) -> Result<()> + Send + Sync>>,
    pub port_override: Option<u16>,
    /* private fields */
}
Expand description

HTTP health check

This health check checks if it can receive the expected HTTP(s) response from the given backend.

Fields§

§consecutive_success: usize

Number of successful checks to flip from unhealthy to healthy.

§consecutive_failure: usize

Number of failed checks to flip from healthy to unhealthy.

§peer_template: HttpPeer

How to connect to the backend.

This field defines settings like the connect timeout and src IP to bind. The SocketAddr of peer_template is just a placeholder which will be replaced by the actual address of the backend when the health check runs.

Set the scheme field to use HTTPs.

§reuse_connection: bool

Whether the underlying TCP/TLS connection can be reused across checks.

  • false will make sure that every health check goes through TCP (and TLS) handshakes. Established connections sometimes hide the issue of firewalls and L4 LB.
  • true will try to reuse connections across checks, this is the more efficient and fast way to perform health checks.
§req: RequestHeader

The request header to send to the backend

§validator: Option<Box<dyn Fn(&ResponseHeader) -> Result<()> + Send + Sync>>

Optional field to define how to validate the response from the server.

If not set, any response with a 200 OK is considered a successful check.

§port_override: Option<u16>

Sometimes the health check endpoint lives one a different port than the actual backend. Setting this option allows the health check to perform on the given port of the backend IP.

Implementations§

source§

impl HttpHealthCheck

source

pub fn new(host: &str, tls: bool) -> Self

Create a new HttpHealthCheck with the following default settings

  • connect timeout: 1 second
  • read timeout: 1 second
  • req: a GET to the / of the given host name
  • consecutive_success: 1
  • consecutive_failure: 1
  • reuse_connection: false
  • validator: None, any 200 response is considered successful
source

pub fn set_connector(&mut self, connector: HttpConnector)

Replace the internal http connector with the given HttpConnector

Trait Implementations§

source§

impl HealthCheck for HttpHealthCheck

source§

fn health_threshold(&self, success: bool) -> usize

This function defines how many consecutive checks should flip the health of a backend. Read more
source§

fn check<'life0, 'life1, 'async_trait>( &'life0 self, target: &'life1 Backend ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Check the given backend. 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<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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

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