pub mod messages;
pub mod publisher;
pub mod consumer;
pub use messages::{JobKind, JobMessage};
pub use publisher::{publish_job, Publisher};
pub use consumer::{run_worker, JobHandler, JobOutcome};
use lapin::{Connection, ConnectionProperties};
pub const EXCHANGE: &str = "dms.jobs";
pub const DLX_EXCHANGE: &str = "dms.jobs.dlx";
pub async fn connect(amqp_url: &str) -> Result<Connection, lapin::Error> {
Connection::connect(amqp_url, ConnectionProperties::default()).await
}
/// Routing key + queue name for a given job kind. Each kind has its own queue
/// so workers can be scaled per-kind. All queues bind to the same exchange.
pub fn routing_key(kind: JobKind) -> &'static str {
match kind {
JobKind::Thumbnail => "job.thumbnail",
JobKind::Ocr => "job.ocr",
JobKind::Describe => "job.describe",
JobKind::ExtractTags => "job.extract_tags",
JobKind::SimilaritySearch => "job.similarity",
}
}
pub fn queue_name(kind: JobKind) -> String {
format!("dms.{}", routing_key(kind).replace('.', "_"))
}
pub fn dlq_name(kind: JobKind) -> String {
format!("dms.{}.dlq", routing_key(kind).replace('.', "_"))
}
⭐
Log in to mark this repository.
1.1 KiB · text
History
1ce9641