pub struct RedisPublisher { /* private fields */ }Expand description
The live stream publisher: RedisPublish paired with a connection. Cheap to clone.
Publisher::publish appends the message to the stream named by
OutgoingMessage::name with XADD <name> * .... The
payload and headers are encoded as entry fields (see crate::RedisStream for the consuming
side).
A publisher may outlive the connected broker it came from (it is a handle aliasing the
connection), so every operation after
shutdown reports RedisError::ShutDown rather
than running against a closed pool.
§Transactions
Both framework transaction kinds are available on standalone and sentinel topologies, and both
commit the same way: the buffer is held client-side while the transaction is open and flushed
as one MULTI / EXEC block, in publish order, so subscribers see the whole batch or none of
it. They differ only in where that buffer lives.
- Borrowed (
TransactionalPublisher): the handle carries one transaction.begin_transactionclaims it and starts buffering published messages,commitflushes them, andabortdiscards them. Clones of a handle share the same open transaction, and a secondbegin_transactionwhile one is open is rejected. - Owned (
OwnedTransactions): everytransactioncall returns aRedisTransactionowning its own buffer, so any number can be open on one handle concurrently and the handle keeps publishing directly meanwhile.
Two Redis properties apply to both kinds. Cluster supports neither, because a MULTI block
cannot span hash slots, so opening a transaction there returns
RedisError::InvalidOptions. And Redis has no rollback: a command that fails at runtime
inside EXEC does not undo the commands before it. For a block of XADDs against stream keys
that is practically limited to out-of-memory and wrong-type keys; a command the server refuses
to queue discards the whole block.
Trait Implementations§
Source§impl Clone for RedisPublisher
impl Clone for RedisPublisher
Source§fn clone(&self) -> RedisPublisher
fn clone(&self) -> RedisPublisher
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RedisPublisher
impl Debug for RedisPublisher
Source§impl OwnedTransactions for RedisPublisher
Owned transactions: every transaction call opens an
independent buffer-owning RedisTransaction, so any number can be open concurrently on one
handle, next to (and unaffected by) the handle-level TransactionalPublisher transaction.
impl OwnedTransactions for RedisPublisher
Owned transactions: every transaction call opens an
independent buffer-owning RedisTransaction, so any number can be open concurrently on one
handle, next to (and unaffected by) the handle-level TransactionalPublisher transaction.
Source§async fn transaction(&self) -> Result<RedisTransaction, RedisError>
async fn transaction(&self) -> Result<RedisTransaction, RedisError>
§Errors
Returns RedisError::InvalidOptions on a cluster topology, which cannot offer
multi-key transactions.
Source§type Transaction = RedisTransaction
type Transaction = RedisTransaction
transaction.Source§impl Publisher for RedisPublisher
impl Publisher for RedisPublisher
Source§impl TransactionalPublisher for RedisPublisher
impl TransactionalPublisher for RedisPublisher
Source§async fn begin_transaction(&self) -> Result<(), Self::Error>
async fn begin_transaction(&self) -> Result<(), Self::Error>
Starts buffering published messages on this handle.
§Errors
Returns RedisError::InvalidOptions on a cluster topology, which cannot offer
multi-key transactions, or RedisError::TransactionBusy when a transaction is already
open on this handle (the open one is left untouched).
Source§async fn commit(&self) -> Result<(), Self::Error>
async fn commit(&self) -> Result<(), Self::Error>
Flushes the buffered XADDs as one MULTI / EXEC block, in publish order, then clears
the transaction.
§Errors
Returns RedisError::NoTransaction when no transaction is open on this handle,
RedisError::ShutDown when the connection is gone, or RedisError::Publish if the
block is rejected. On failure the transaction is already closed: the buffer is lost, and
recovery is redelivery of the inputs rather than resubmission of the buffer.
Auto Trait Implementations§
impl !RefUnwindSafe for RedisPublisher
impl !UnwindSafe for RedisPublisher
impl Freeze for RedisPublisher
impl Send for RedisPublisher
impl Sync for RedisPublisher
impl Unpin for RedisPublisher
impl UnsafeUnpin for RedisPublisher
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
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<P> ErasedPublisher for Pwhere
P: Publisher,
impl<P> ErasedPublisher for Pwhere
P: Publisher,
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