pub struct CoreWildcard { /* private fields */ }Expand description
A pattern subscribed to over Core NATS: orders.*, orders.>, >.
The same subscription as CoreSubject, on many subjects instead of one. That is the whole
difference between the two types, and it is the difference that matters to a retry: a pattern
names many subjects and none of them in particular, so this subscription cannot say where a
copy of a delivery would reach it again. The mount site says it instead, with
.out_retry(Publish).to("orders.created") or with a transform that reads the delivery and
names its own subject; a registration that says neither refuses to start.
§Examples
use std::time::Duration;
use ruststream_nats::prelude::*;
use serde::Deserialize;
#[derive(Deserialize)]
struct Order {
id: u64,
paid: bool,
}
#[subscriber(CoreWildcard::new("orders.*").queue_group("auditors"))]
async fn audit(order: &Order) -> HandlerOutcome {
if order.paid {
return HandlerOutcome::ack();
}
HandlerOutcome::retry_after(Duration::from_secs(30))
}
#[ruststream::app]
fn app() -> impl App {
RustStream::new(AppInfo::new("audit", "0.1.0")).with_broker(
NatsBroker::new("nats://localhost:4222"),
|b| {
// A pattern is no destination, so the mount site names where a delayed copy goes.
b.include(audit)
.max_attempts(nonzero!(5u32))
.dead_letter("orders.dead")
.out_retry(Publish)
.to("orders.audit");
},
)
}Implementations§
Source§impl CoreWildcard
impl CoreWildcard
Sourcepub fn new(subject: impl Into<String>) -> Self
pub fn new(subject: impl Into<String>) -> Self
Subscribes to the pattern subject over Core NATS.
Sourcepub fn queue_group(self, name: impl Into<String>) -> Self
pub fn queue_group(self, name: impl Into<String>) -> Self
Load-balances the pattern across a queue group, exactly as
CoreSubject::queue_group does for one subject.
Trait Implementations§
Source§impl Clone for CoreWildcard
impl Clone for CoreWildcard
Source§impl Debug for CoreWildcard
impl Debug for CoreWildcard
impl Eq for CoreWildcard
Source§impl IntoSource for CoreWildcard
impl IntoSource for CoreWildcard
Source§type Source = CoreWildcard
type Source = CoreWildcard
The source the constructor stores.
Source§fn into_source(self) -> Self
fn into_source(self) -> Self
Builds the source.
Source§impl NatsSubscription for CoreWildcard
impl NatsSubscription for CoreWildcard
Source§fn ensure_subject(&self) -> Result<(), NatsError>
fn ensure_subject(&self) -> Result<(), NatsError>
The one thing about a subscription the types cannot settle: the subject is a string the
caller supplies, often from configuration, and a descriptor constructor is the expression
a
#[subscriber(..)] attribute writes, so it cannot hand back a Result. Every
subscribe implementation calls this before it does any work. Read moreSource§impl PartialEq for CoreWildcard
impl PartialEq for CoreWildcard
impl StructuralPartialEq for CoreWildcard
Source§impl SubscriptionSource<ConnectedNatsBroker> for CoreWildcard
impl SubscriptionSource<ConnectedNatsBroker> for CoreWildcard
Source§type Subscriber = NatsSubscriber
type Subscriber = NatsSubscriber
The subscriber type this source opens.
Source§type Copies = NamedCopies
type Copies = NamedCopies
Who publishes the copies this subscription’s retries are made of, and who names where they
go:
AddressedCopies, NamedCopies or BrokerMoves. Read moreSource§async fn subscribe(
self,
connected: &ConnectedNatsBroker,
) -> Result<Self::Subscriber, NatsError>
async fn subscribe( self, connected: &ConnectedNatsBroker, ) -> Result<Self::Subscriber, NatsError>
Opens the subscription against the connected broker. Called once at startup. Read more
Source§fn operation_bindings(&self) -> Bindings
fn operation_bindings(&self) -> Bindings
What this subscription adds to its
receive operation in the document. Read moreSource§fn declare_retry(self, declaration: &RetryDeclaration) -> Selfwhere
Self: Sized,
fn declare_retry(self, declaration: &RetryDeclaration) -> Selfwhere
Self: Sized,
Takes the registration’s retry declaration into the descriptor, before the subscription
opens. Read more
Source§fn declare_retry_on(
&self,
connected: &C,
declaration: &RetryDeclaration,
) -> Result<(), DeclareRetryError>
fn declare_retry_on( &self, connected: &C, declaration: &RetryDeclaration, ) -> Result<(), DeclareRetryError>
Carries the registration’s declaration to the broker, at the same point and before the
subscription opens. Read more
Source§fn channel_bindings(&self) -> Bindings
fn channel_bindings(&self) -> Bindings
What this subscription adds to its channel in the generated
AsyncAPI document. Read moreSource§fn message_bindings(&self) -> Bindings
fn message_bindings(&self) -> Bindings
What this subscription adds to the messages that arrive on it. Read more
Auto Trait Implementations§
impl Freeze for CoreWildcard
impl RefUnwindSafe for CoreWildcard
impl Send for CoreWildcard
impl Sync for CoreWildcard
impl Unpin for CoreWildcard
impl UnsafeUnpin for CoreWildcard
impl UnwindSafe for CoreWildcard
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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