Add support for results queue and routing key in MQ configuration, bump version to 0.1.4

- Introduce `results_queue` and `results_routing_key` to MQ configuration.
- Update message publishing and queue declaration logic to leverage new fields.
- Increment orchestrator version to 0.1.4.

Signed-off-by: Till Wegmueller <toasterson@gmail.com>
This commit is contained in:
Till Wegmueller 2025-11-17 20:51:57 +01:00
parent 8e21c2ba47
commit 5d8e79c8d4
No known key found for this signature in database
3 changed files with 51 additions and 9 deletions

View file

@ -55,7 +55,18 @@ impl AppConfig {
.or_else(|| kdl_map.get("AMQP_PREFETCH").and_then(|s| s.parse().ok()))
.unwrap_or(64u16);
let mq = crate::mq::MqConfig { url, exchange, routing_key, queue, dlx, dlq, prefetch };
let results_routing_key = std::env::var("AMQP_RESULTS_ROUTING_KEY")
.ok()
.or_else(|| kdl_map.get("AMQP_RESULTS_ROUTING_KEY").cloned())
.or_else(|| std::env::var("RESULTS_ROUTING_KEY").ok())
.unwrap_or_else(|| "jobresult.v1".into());
let results_queue = std::env::var("AMQP_RESULTS_QUEUE")
.ok()
.or_else(|| kdl_map.get("AMQP_RESULTS_QUEUE").cloned())
.or_else(|| std::env::var("RESULTS_QUEUE").ok())
.unwrap_or_else(|| "solstice.results.v1".into());
let mq = crate::mq::MqConfig { url, exchange, routing_key, queue, results_routing_key, results_queue, dlx, dlq, prefetch };
Ok(Self { grpc_addr, http_addr, database_url, otlp_endpoint, mq })
}

View file

@ -57,6 +57,8 @@ pub struct MqConfig {
pub exchange: String,
pub routing_key: String,
pub queue: String,
pub results_routing_key: String,
pub results_queue: String,
pub dlx: String,
pub dlq: String,
pub prefetch: u16,
@ -67,15 +69,17 @@ impl Default for MqConfig {
Self {
url: std::env::var("AMQP_URL").unwrap_or_else(|_| "amqp://127.0.0.1:5672/%2f".into()),
exchange: std::env::var("AMQP_EXCHANGE").unwrap_or_else(|_| "solstice.jobs".into()),
routing_key: std::env::var("AMQP_ROUTING_KEY")
.unwrap_or_else(|_| "jobrequest.v1".into()),
routing_key: std::env::var("AMQP_ROUTING_KEY").unwrap_or_else(|_| "jobrequest.v1".into()),
queue: std::env::var("AMQP_QUEUE").unwrap_or_else(|_| "solstice.jobs.v1".into()),
results_routing_key: std::env::var("AMQP_RESULTS_ROUTING_KEY")
.or_else(|_| std::env::var("RESULTS_ROUTING_KEY"))
.unwrap_or_else(|_| "jobresult.v1".into()),
results_queue: std::env::var("AMQP_RESULTS_QUEUE")
.or_else(|_| std::env::var("RESULTS_QUEUE"))
.unwrap_or_else(|_| "solstice.results.v1".into()),
dlx: std::env::var("AMQP_DLX").unwrap_or_else(|_| "solstice.dlx".into()),
dlq: std::env::var("AMQP_DLQ").unwrap_or_else(|_| "solstice.jobs.v1.dlq".into()),
prefetch: std::env::var("AMQP_PREFETCH")
.ok()
.and_then(|s| s.parse().ok())
.unwrap_or(64),
prefetch: std::env::var("AMQP_PREFETCH").ok().and_then(|s| s.parse().ok()).unwrap_or(64),
}
}
}
@ -189,6 +193,33 @@ pub async fn declare_topology(channel: &Channel, cfg: &MqConfig) -> Result<()> {
.await
.into_diagnostic()?;
// Declare results queue (no DLX by default) and bind to results routing key
channel
.queue_declare(
&cfg.results_queue,
QueueDeclareOptions {
durable: true,
auto_delete: false,
exclusive: false,
nowait: false,
passive: false,
},
FieldTable::default(),
)
.await
.into_diagnostic()?;
channel
.queue_bind(
&cfg.results_queue,
&cfg.exchange,
&cfg.results_routing_key,
QueueBindOptions { nowait: false },
FieldTable::default(),
)
.await
.into_diagnostic()?;
Ok(())
}
@ -401,7 +432,7 @@ pub async fn publish_job_result(cfg: &MqConfig, result: &JobResult) -> Result<()
let confirm = channel
.basic_publish(
&cfg.exchange,
"jobresult.v1",
&cfg.results_routing_key,
BasicPublishOptions {
mandatory: true,
immediate: false,

View file

@ -1,6 +1,6 @@
[package]
name = "orchestrator"
version = "0.1.3"
version = "0.1.4"
edition = "2024"
build = "build.rs"