Skip to main content

kojin_core/
broker.rs

1use async_trait::async_trait;
2
3use crate::error::TaskResult;
4use crate::message::TaskMessage;
5use crate::task_id::TaskId;
6
7/// Message broker responsible for enqueuing and dequeuing task messages.
8#[async_trait]
9pub trait Broker: Send + Sync + 'static {
10    /// Push a message onto a queue.
11    async fn enqueue(&self, message: TaskMessage) -> TaskResult<()>;
12
13    /// Blocking dequeue from one of the given queues.
14    /// Returns `None` if shutdown is signaled or timeout occurs.
15    async fn dequeue(
16        &self,
17        queues: &[String],
18        timeout: std::time::Duration,
19    ) -> TaskResult<Option<TaskMessage>>;
20
21    /// Acknowledge successful processing — remove from processing queue.
22    async fn ack(&self, id: &TaskId) -> TaskResult<()>;
23
24    /// Negative acknowledge — message will be re-enqueued or dead-lettered.
25    async fn nack(&self, message: TaskMessage) -> TaskResult<()>;
26
27    /// Move a message to the dead-letter queue.
28    async fn dead_letter(&self, message: TaskMessage) -> TaskResult<()>;
29
30    /// Schedule a message for future delivery.
31    async fn schedule(
32        &self,
33        message: TaskMessage,
34        eta: chrono::DateTime<chrono::Utc>,
35    ) -> TaskResult<()>;
36
37    /// Get the length of a queue.
38    async fn queue_len(&self, queue: &str) -> TaskResult<usize>;
39}