Skip to main content

QueueDriver

Enum QueueDriver 

Source
pub enum QueueDriver {
    Sync,
    Memory,
    Database,
    Redis,
    Sqs,
}
Expand description

Which Queue to build.

use rainier_queue::QueueDriver;
use rainier_support::Setting;

assert!(!QueueDriver::Sync.is_deferred(), "sync runs the job inline");
assert!(QueueDriver::parse("database").unwrap().survives_a_restart());

Variants§

§

Sync

Run the job inline, on the thread that dispatched it.

The default because it needs no worker: a fresh clone dispatches a job and the job happens. Also the reason a slow job makes a slow request — which is the thing a queue exists to avoid, so this is a development setting.

§

Memory

A queue in this process’s memory.

For tests that want a job to be queued rather than run, so they can assert on it. Lost on restart, invisible to other processes.

§

Database

Two tables in the application’s own database.

Durable, shared, and needs no new infrastructure — the reason it is the usual production answer. Needs the migrations (DatabaseQueue::migrations()) and a queue:work process.

§

Redis

Redis streams.

Durable-ish, and the qualifier is the point: Redis acknowledges a write before it is on disk and before a replica has it, so a job can be lost to a crash or a failover. Right for work you can afford to lose, wrong for work you cannot — see the driver’s docs. Needs the redis feature.

§

Sqs

Amazon SQS.

Durable and managed, with the visibility timeout doing the reservation. Needs the sqs feature.

Implementations§

Source§

impl QueueDriver

Source

pub fn as_str(&self) -> &'static str

The wire spelling — what appears in .env and in the config tree.

Inherent as well as on the trait, so callers do not have to import Setting to print one.

Source§

impl QueueDriver

Source

pub fn is_deferred(&self) -> bool

Whether dispatching returns before the job has run.

false for Sync, which is the whole difference between it and the others — and the reason a test that asserts on a side effect passes under sync and hangs under everything else.

Source

pub fn survives_a_restart(&self) -> bool

Whether a job dispatched now survives this process exiting.

True for anything that stores the job somewhere else. It is not the same question as whether the job is safe — see may_lose_an_accepted_job, which is the one that catches Redis.

Source

pub fn may_lose_an_accepted_job(&self) -> bool

Whether a dispatch this driver accepted can still be lost.

True only for Redis, and it is the distinction the obvious question misses: a Redis job survives your process restarting, because it lives in another one — and can still vanish, because Redis acknowledges a write before it is on disk (appendfsync everysec leaves a window of about a second) and before any replica has it ( replication is asynchronous, so a failover can drop confirmed writes).

A database queue’s insert is committed before it returns; SQS is replicated across availability zones before it acknowledges. Neither can tell you a job is queued and then lose it.

So this is the predicate a deploy check should look at when the work is a payment rather than a cache warm.

Source

pub fn needs_a_worker(&self) -> bool

Whether this driver needs a queue:work process to make progress.

Trait Implementations§

Source§

impl AsRef<str> for QueueDriver

Source§

fn as_ref(&self) -> &str

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Clone for QueueDriver

Source§

fn clone(&self) -> QueueDriver

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for QueueDriver

Source§

impl Debug for QueueDriver

Source§

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

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

impl Default for QueueDriver

Source§

fn default() -> QueueDriver

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for QueueDriver

Source§

fn deserialize<D>( deserializer: D, ) -> Result<QueueDriver, <D as Deserializer<'de>>::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for QueueDriver

Source§

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

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

impl Eq for QueueDriver

Source§

impl FromStr for QueueDriver

Source§

type Err = Error

The associated error which can be returned from parsing.
Source§

fn from_str(raw: &str) -> Result<QueueDriver, <QueueDriver as FromStr>::Err>

Parses a string s to return a value of this type. Read more
Source§

impl Hash for QueueDriver

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for QueueDriver

Source§

fn eq(&self, other: &QueueDriver) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for QueueDriver

Source§

fn serialize<S>( &self, serializer: S, ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Setting for QueueDriver

Source§

const SETTING: &'static str = "queue driver"

What this setting is called in an error message — "cache driver". Read more
Source§

const ALL: &'static [QueueDriver]

Every variant, in the order they should be listed to a human.
Source§

fn as_str(&self) -> &'static str

The wire spelling — what appears in .env, in the config tree, and in serialised output.
Source§

fn parse(raw: &str) -> Result<Self, Error>

Parse a wire spelling. Read more
Source§

fn options() -> String

The valid spellings, backtick-quoted and comma-separated. Read more
Source§

impl StructuralPartialEq for QueueDriver

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> AsOut<T> for T
where T: Copy,

Source§

fn as_out(&mut self) -> Out<'_, T>

Returns an out reference to self.
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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> Event for T
where T: Send + Sync + 'static,

Source§

fn event_name() -> &'static str
where Self: Sized,

A human-readable name, used by wildcard listeners and log output. Always the Rust type path; see the trait docs.
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<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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