Skip to main content

PulsarMessage

Struct PulsarMessage 

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

A message delivered by a PulsarSubscriber.

ack acknowledges; nack(requeue = true) asks the broker to redeliver, which is what drives the delivery count towards the subscription’s dead-letter policy. nack(requeue = false) acknowledges too: Pulsar settles a message by acknowledging it or asking for it again, and a poison message leaves through the dead-letter policy, reached by repeated redelivery. The client queues acknowledgements asynchronously, so Ok means “queued”, not “broker confirmed”.

nack_after(delay) is the delayed form, and the delay is this process’s: Pulsar’s negative acknowledgement carries none, so the delivery is held unacknowledged until the delay is over and the negative acknowledgement goes out then. The redelivery itself is the broker’s, and so is the count it advances.

Implementations§

Source§

impl PulsarMessage

Source

pub fn topic(&self) -> &str

The topic this message arrived on, named the way its subscription named it: as written in PulsarSubscription::new or topics, and by its full name for a pattern, whose topics the client finds by listing their full names. A partitioned topic adds its partition suffix.

Trait Implementations§

Source§

impl BuildBatchContext<PulsarMessage> for PulsarBatchContext

Source§

fn build(first: &PulsarMessage) -> Self

Builds the context value by reading subscription-scoped fields out of the batch’s first delivery, or out of the batch itself where it lends its values as one slice.
Source§

impl BuildContext<PulsarMessage> for PulsarContext

Source§

fn build(msg: &PulsarMessage) -> Self

Builds the context value by reading fields out of msg.
Source§

impl Debug for PulsarMessage

Source§

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

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

impl IncomingMessage for PulsarMessage

Source§

fn supports_nack_after(&self) -> bool

The delay is kept by this process rather than by the broker, and that is still native delayed redelivery as far as the framework is concerned: no copy of the message is published, and the redelivery that follows is the broker’s own, counted by the consumer’s dead-letter policy like any other.

Source§

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

Holds the delivery unacknowledged for delay, then negatively acknowledges it so the broker redelivers.

The wait runs on a task of its own, started by the subscription’s driver on the runtime the broker connected on: the dispatch loop must not stop for it, and a handler on a dedicated thread may settle from a runtime that stops before the delay is out. The delivery’s settlement channel keeps the driver alive until the wait is over. Ok therefore means the delay was accepted, not that the redelivery has happened yet.

§Errors

Returns AckError::Broker when the delay is not shorter than the subscription’s ack_timeout, which would redeliver the message before the delay was over, or when the subscription is gone (its driver task has shut down, or in process the broker did).

§Cancel safety

At-most-once over the delay window: the message is unacknowledged throughout, so a process that exits before the wait ends loses only the wait. The broker redelivers the message once the consumer’s ack_timeout elapses, and at once where the consumer disconnects.

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 redelivery_count(&self) -> Option<u64>

How many times the broker has delivered this message, counting this delivery. None where the transport counts nothing. 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 PulsarMessage

Source§

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

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

impl Positioned for PulsarMessage

Source§

type Position = PulsarPosition

The position type, matching the subscription’s Seeker::Position.
Source§

fn position(&self) -> PulsarPosition

Returns the position of this delivery; seeking to it redelivers this message.

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> 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> PublishedThrough<DefaultSlot> for T

Source§

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

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