Skip to main content

PubSubMessage

Struct PubSubMessage 

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

A message delivered by a PubSubSubscriber.

ack and nack(requeue = true) are native. nack(requeue = false) acknowledges: Pub/Sub has no “drop without redelivery” beyond acknowledgement - dead-lettering is the subscription’s dead-letter policy, driven by repeated nacks and expired deadlines, not a per-message verb. The exception is the last delivery that policy allows, where a rejection is exactly how the message reaches the dead-letter topic; a delivery there is rejected rather than acknowledged. The policy is the one the subscription carries when it opens, declared at the mount site or set by an operator. On an exactly-once subscription the confirmed forms are used, so Ok from ack means the broker accepted it.

Trait Implementations§

Source§

impl Debug for PubSubMessage

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl IncomingMessage for PubSubMessage

Source§

fn redelivery_count(&self) -> Option<u64>

The delivery attempt the service reports, counting this delivery.

Pub/Sub sends it only where the subscription has a dead-letter policy, so a subscription without one reports no count. It is the only count a delivery of this crate carries: nothing here publishes a retry copy, so the framework’s own header never appears beside it, and the cap the count would be read against is the subscription’s to apply.

Source§

fn supports_nack_after(&self) -> bool

Pub/Sub has no delayed nack of its own, so this crate holds the delivery instead. The client keeps extending the ack deadline of a delivery nothing has settled, which is what makes holding one a real delay rather than a lost message.

Source§

fn nack_after( self, delay: Duration, ) -> impl Future<Output = Result<(), AckError>> + Send

Holds the delivery for delay, then rejects it so the subscription redelivers.

The delivery stays leased while it is held: the client extends its ack deadline in the background for as long as nothing has settled it, up to GooglePubSub::max_lease. The wait runs on a task of its own, so the subscription keeps dispatching; the delivery counts against the subscription’s outstanding messages until it comes back, which is what it does against the service too.

If the process dies while a delivery is held, the lease stops being extended and the subscription redelivers on its own once it expires. The delay is lost there, not the message.

§Errors

Returns AckError::Broker carrying PubSubError::DelayBeyondLease when delay outlives the subscription’s maximum lease, because the delivery would come back before it elapsed. The check is at the call because a handler names the delay while it runs.

Source§

fn payload(&self) -> &[u8] ⓘ

Returns the raw payload of the message.
Source§

fn headers(&self) -> &HeaderMap

Returns the headers attached to the message.
Source§

async fn ack(self) -> Result<(), AckError>

Acknowledges successful processing. Consumes the message handle. Read more
Source§

async fn nack(self, requeue: bool) -> Result<(), AckError>

Negatively acknowledges the message. When requeue is true the broker should redeliver according to its own retry policy; when false it should drop or dead-letter the message. Read more
Source§

fn partition_key(&self) -> Option<&[u8]>

Returns the routing key the broker partitioned this message by, or None when the message carries no key. Read more
Source§

fn decode_error(&self) -> Option<&CodecError>

The error the broker met while reading this delivery, or None when it read the delivery whole. Read more
Source§

impl Partitioned for PubSubMessage

Source§

fn partition_key(&self) -> Option<&[u8]>

Returns the partition key for this item, or None if the broker should pick a partition.

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self> ⓘ

Attaches the current Context to this type, returning a WithContext wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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: Sized + 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> PublishedThrough<DefaultSlot> for T

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = !

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

fn try_from(value: U) -> Result<T, !>

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