PublishOptions
Options for publishing messages.
use broccoli_queue::queue::PublishOptions;
Structure
pub struct PublishOptions {
/// Time-to-live for the message
pub ttl: Option<Duration>,
/// Message priority (1-5, where 1 is highest)
pub priority: Option<u8>,
/// Delay before the message is published
pub delay: Option<Duration>,
/// Scheduled time for message delivery
pub scheduled_at: Option<OffsetDateTime>,
}
Builder
let options = PublishOptions::builder()
.delay(Duration::seconds(30))
.priority(1)
.ttl(Duration::hours(24))
.build();
queue.publish("jobs", None, &job, Some(options)).await?;
Methods
builder()
Creates a new PublishOptionsBuilder.
pub const fn builder() -> PublishOptionsBuilder
PublishOptionsBuilder
Builder for constructing PublishOptions.
ttl
Sets the time-to-live for the message.
pub const fn ttl(mut self, duration: Duration) -> Self
Example:
PublishOptions::builder()
.ttl(Duration::hours(1))
.build()
priority
Sets the priority level (1-5, where 1 is highest).
pub fn priority(mut self, priority: u8) -> Self
Panics: If priority is not between 1 and 5.
Example:
PublishOptions::builder()
.priority(1) // High priority
.build()
delay
Sets a delay before message delivery.
pub const fn delay(mut self, duration: Duration) -> Self
Example:
PublishOptions::builder()
.delay(Duration::minutes(5))
.build()
schedule_at
Sets a specific delivery time.
pub const fn schedule_at(mut self, time: OffsetDateTime) -> Self
Example:
use time::OffsetDateTime;
let tomorrow = OffsetDateTime::now_utc() + Duration::days(1);
PublishOptions::builder()
.schedule_at(tomorrow)
.build()
build
Builds the PublishOptions.
pub const fn build(self) -> PublishOptions
ConsumeOptions
Options for consuming messages.
use broccoli_queue::queue::ConsumeOptions;
Structure
pub struct ConsumeOptions {
/// Auto-acknowledge messages (default: false)
pub auto_ack: Option<bool>,
/// Enable fairness queue consumption (Redis only)
pub fairness: Option<bool>,
/// Wait duration between consume iterations
pub consume_wait: Option<std::time::Duration>,
/// Acknowledge after handler success (default: true)
pub handler_ack: Option<bool>,
}
Builder
let options = ConsumeOptions::builder()
.fairness(true)
.auto_ack(false)
.build();
queue.process_messages("jobs", Some(4), Some(options), handler).await?;
ConsumeOptionsBuilder
Builder for constructing ConsumeOptions.
auto_ack
Sets whether messages are auto-acknowledged.
pub const fn auto_ack(mut self, auto_ack: bool) -> Self
Default: false
If auto_ack is true, calling acknowledge() or reject() will return an error.
fairness
Enables fairness queue consumption (Redis only).
pub const fn fairness(mut self, fairness: bool) -> Self
Example:
ConsumeOptions::builder()
.fairness(true)
.build()
consume_wait
Sets the wait duration between consume loop iterations.
pub const fn consume_wait(mut self, consume_wait: std::time::Duration) -> Self
This allows consumer loops to be interrupted by tokio.
Example:
ConsumeOptions::builder()
.consume_wait(std::time::Duration::from_millis(10))
.build()
handler_ack
Controls automatic acknowledgment after successful handler execution.
pub const fn handler_ack(mut self, followup: bool) -> Self
Default: true
Set to false to manually control acknowledgment:
ConsumeOptions::builder()
.handler_ack(false)
.build()
build
Builds the ConsumeOptions.
pub const fn build(self) -> ConsumeOptions
RetryStrategy
Configuration for message retry behavior.
use broccoli_queue::queue::RetryStrategy;
Structure
pub struct RetryStrategy {
/// Whether failed messages should be retried
pub retry_failed: bool,
/// Maximum number of retry attempts
pub attempts: Option<u8>,
}
Default
impl Default for RetryStrategy {
fn default() -> Self {
Self {
retry_failed: true,
attempts: Some(3),
}
}
}
Methods
new
Creates a new retry strategy with defaults.
pub const fn new() -> Self
with_attempts
Sets the maximum retry attempts.
pub const fn with_attempts(mut self, attempts: u8) -> Self
Example:
RetryStrategy::new().with_attempts(5)
retry_failed
Enables or disables retrying.
pub const fn retry_failed(mut self, retry_failed: bool) -> Self
Example:
// Disable retries - failures go directly to failed queue
RetryStrategy::new().retry_failed(false)
Usage
let queue = BroccoliQueue::builder("redis://localhost:6379")
.failed_message_retry_strategy(
RetryStrategy::new()
.with_attempts(5)
.retry_failed(true)
)
.build()
.await?;
QueueStatus (management feature)
Status information for a queue.
#[cfg(feature = "management")]
use broccoli_queue::brokers::management::QueueStatus;
Structure
pub struct QueueStatus {
pub pending_count: u64,
pub processing_count: u64,
pub failed_count: u64,
}
Usage
#[cfg(feature = "management")]
{
let status = queue.queue_status("jobs".into(), None).await?;
println!("Pending: {}", status.pending_count);
println!("Processing: {}", status.processing_count);
println!("Failed: {}", status.failed_count);
}