GrpcServer

Struct GrpcServer 

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

A gRPC server.

Allows serving multiple gRPC services from a single endpoint.

This type is a thin wrapper over helper types from tonic and axum, and principally is meant to provide an opaque gRPC server implementation that operates correctly when run under supervision. As such, this type can’t be manually served: it is only usable by adding it to a supervisor.

§Supervision

The listen address is bound during initialization, so a failure to bind is raised before the supervised worker starts running, and a restart rebinds.

The server will attempt to gracefully shutdown existing connections when the parent supervisor signals shutdown. This will cause the worker to utilize the maximum allowable grace period during shutdown: it will attempt to take as long as necessary to gracefully shutdown existing connections, bounded only by the parent supervisor.

Implementations§

Source§

impl GrpcServer

Source

pub fn new(listen_addr: ListenAddress) -> Self

Creates an empty server with no attached services, configured to listen on the given address.

Source

pub fn with_graceful_shutdown_timeout(self, timeout: Duration) -> Self

Sets the graceful shutdown timeout for this server.

During shutdown, the server will for all in-flight connections to complete before ultimately completing itself. When no timeout is specified, this will lead to the worker taking the maximum allowable time to shutdown if connections are blocked or otherwise “stuck.” Setting an explicit graceful shutdown timeout will cause the worker to bound how long it waits for in-flight connections to shutdown before forcefully completing and moving on.

Defaults to no timeout (wait as long as allowed).

Source

pub fn add_service<S>(self, svc: S) -> Self
where S: Service<Request<Body>, Error = Infallible> + NamedService + Clone + Send + Sync + 'static, S::Response: IntoResponse, S::Future: Send + 'static,

Adds a new service to this server.

Trait Implementations§

Source§

impl Supervisable for GrpcServer

Source§

fn name(&self) -> &str

Returns the name of the process.
Source§

fn shutdown_strategy(&self) -> ShutdownStrategy

Returns the shutdown strategy for the process.
Source§

fn initialize<'life0, 'async_trait>( &'life0 self, process_shutdown: ShutdownHandle, ) -> Pin<Box<dyn Future<Output = Result<SupervisorFuture, InitializationError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Initializes the process asynchronously. 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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Track for T

Source§

fn track_resources(self, token: ResourceGroupToken) -> Tracked<Self>

Instruments this type by attaching the given resource group token, returning a Tracked wrapper. Read more
Source§

fn in_current_resource_group(self) -> Tracked<Self>

Instruments this type by attaching the current resource group, returning a Tracked wrapper. Read more
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<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