pub struct SqsQueue { /* private fields */ }Expand description
A subscription descriptor for one SQS queue.
Accepts a queue URL or a queue name (resolved through GetQueueUrl on subscribe).
Implements SubscriptionSource, so it can sit inline in the #[subscriber(..)]
decorator:
use std::time::Duration;
use ruststream_sqs_sns::prelude::*;
#[subscriber(
SqsQueue::new("orders")
.wait(Duration::from_secs(20))
.visibility(Duration::from_secs(30))
)]
async fn handle(order: &Order<'_>) -> HandlerOutcome {
if order.0.is_empty() {
return HandlerOutcome::drop();
}
HandlerOutcome::ack()
}
#[app]
fn service() -> impl App {
RustStream::new(AppInfo::new("orders", "0.1.0")).with_broker(SqsBroker::new(), |b| {
b.include(handle);
})
}The same options are also reachable at the mount site through SqsSubscription, which is
where they go when the registration names a batch size first.
max_attempts(n) and dead_letter(name) right after include are one setting here, the
queue’s redrive policy: the subscription writes both onto the queue when it opens, and SQS
counts the receives and moves a spent delivery to the dead-letter queue itself. Half a policy
is SqsError::IncompleteRedrive at startup.
use ruststream_sqs_sns::prelude::*;
use serde::Deserialize;
#[derive(Deserialize)]
struct Invoice {
id: u64,
}
#[subscriber(SqsQueue::new("invoices"))]
async fn settle(invoice: &Invoice) -> HandlerOutcome {
if invoice.id == 0 {
return HandlerOutcome::retry();
}
HandlerOutcome::ack()
}
#[app]
fn service() -> impl App {
RustStream::new(AppInfo::new("invoices", "0.1.0")).with_broker(SqsBroker::new(), |b| {
b.include(settle)
.max_attempts(nonzero!(3u32))
.dead_letter("invoices-dead");
})
}Implementations§
Source§impl SqsQueue
impl SqsQueue
Sourcepub fn new(queue: impl Into<String>) -> Self
pub fn new(queue: impl Into<String>) -> Self
Names the queue by URL (https://sqs...) or by name.
Sourcepub fn wait(self, wait: Duration) -> Self
pub fn wait(self, wait: Duration) -> Self
Long-polling wait per receive call. Defaults to the protocol maximum of 20 seconds; values above it are rejected before any I/O.
Sourcepub fn visibility(self, visibility: Duration) -> Self
pub fn visibility(self, visibility: Duration) -> Self
The visibility timeout requested per receive; the crate extends it in the background while a handler holds the message. Defaults to the queue’s configured timeout.
SQS takes whole seconds from one second to twelve hours. A value outside that range is rejected before any I/O, and a fraction of a second rounds up to the next whole second.
Sourcepub fn create_if_missing(self) -> Self
pub fn create_if_missing(self) -> Self
Creates the queue on subscribe when it does not exist yet (a name ending in .fifo
creates a FIFO queue with content-based deduplication). Meant for local development and
tests; production queues are usually managed as infrastructure.
Trait Implementations§
impl Eq for SqsQueue
Source§impl FromName for SqsQueue
A queue is named and nothing more, so a definition may fix the kind and leave the name to the
mount site: #[subscriber(SqsQueue)] on the handler, .name("orders") where it is included.
Every polling option keeps its default there, and the mount-site steps of SqsSubscription
change them.
impl FromName for SqsQueue
A queue is named and nothing more, so a definition may fix the kind and leave the name to the
mount site: #[subscriber(SqsQueue)] on the handler, .name("orders") where it is included.
Every polling option keeps its default there, and the mount-site steps of SqsSubscription
change them.
impl StructuralPartialEq for SqsQueue
Source§impl SubscriptionSource<ConnectedSqsBroker> for SqsQueue
impl SubscriptionSource<ConnectedSqsBroker> for SqsQueue
Source§type Subscriber = SqsSubscriber
type Subscriber = SqsSubscriber
Source§type Copies = BrokerMoves
type Copies = BrokerMoves
AddressedCopies, NamedCopies or BrokerMoves. Read moreSource§async fn subscribe(
self,
connected: &ConnectedSqsBroker,
) -> Result<SqsSubscriber, SqsError>
async fn subscribe( self, connected: &ConnectedSqsBroker, ) -> Result<SqsSubscriber, SqsError>
Source§fn declare_retry(self, declaration: &RetryDeclaration) -> Self
fn declare_retry(self, declaration: &RetryDeclaration) -> Self
Source§fn channel_bindings(&self) -> Bindings
fn channel_bindings(&self) -> Bindings
AsyncAPI document. Read moreSource§fn declare_retry_on(
&self,
connected: &C,
declaration: &RetryDeclaration,
) -> Result<(), DeclareRetryError>
fn declare_retry_on( &self, connected: &C, declaration: &RetryDeclaration, ) -> Result<(), DeclareRetryError>
Source§fn operation_bindings(&self) -> Bindings
fn operation_bindings(&self) -> Bindings
receive operation in the document. Read moreSource§fn message_bindings(&self) -> Bindings
fn message_bindings(&self) -> Bindings
Auto Trait Implementations§
impl Freeze for SqsQueue
impl RefUnwindSafe for SqsQueue
impl Send for SqsQueue
impl Sync for SqsQueue
impl Unpin for SqsQueue
impl UnsafeUnpin for SqsQueue
impl UnwindSafe for SqsQueue
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
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
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> ⓘ
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> ⓘ
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