mirror of
https://codeberg.org/Toasterson/solstice-ci.git
synced 2026-04-10 13:20:41 +00:00
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:
parent
8e21c2ba47
commit
5d8e79c8d4
3 changed files with 51 additions and 9 deletions
|
|
@ -55,7 +55,18 @@ impl AppConfig {
|
||||||
.or_else(|| kdl_map.get("AMQP_PREFETCH").and_then(|s| s.parse().ok()))
|
.or_else(|| kdl_map.get("AMQP_PREFETCH").and_then(|s| s.parse().ok()))
|
||||||
.unwrap_or(64u16);
|
.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 })
|
Ok(Self { grpc_addr, http_addr, database_url, otlp_endpoint, mq })
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,8 @@ pub struct MqConfig {
|
||||||
pub exchange: String,
|
pub exchange: String,
|
||||||
pub routing_key: String,
|
pub routing_key: String,
|
||||||
pub queue: String,
|
pub queue: String,
|
||||||
|
pub results_routing_key: String,
|
||||||
|
pub results_queue: String,
|
||||||
pub dlx: String,
|
pub dlx: String,
|
||||||
pub dlq: String,
|
pub dlq: String,
|
||||||
pub prefetch: u16,
|
pub prefetch: u16,
|
||||||
|
|
@ -67,15 +69,17 @@ impl Default for MqConfig {
|
||||||
Self {
|
Self {
|
||||||
url: std::env::var("AMQP_URL").unwrap_or_else(|_| "amqp://127.0.0.1:5672/%2f".into()),
|
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()),
|
exchange: std::env::var("AMQP_EXCHANGE").unwrap_or_else(|_| "solstice.jobs".into()),
|
||||||
routing_key: std::env::var("AMQP_ROUTING_KEY")
|
routing_key: std::env::var("AMQP_ROUTING_KEY").unwrap_or_else(|_| "jobrequest.v1".into()),
|
||||||
.unwrap_or_else(|_| "jobrequest.v1".into()),
|
|
||||||
queue: std::env::var("AMQP_QUEUE").unwrap_or_else(|_| "solstice.jobs.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()),
|
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()),
|
dlq: std::env::var("AMQP_DLQ").unwrap_or_else(|_| "solstice.jobs.v1.dlq".into()),
|
||||||
prefetch: std::env::var("AMQP_PREFETCH")
|
prefetch: std::env::var("AMQP_PREFETCH").ok().and_then(|s| s.parse().ok()).unwrap_or(64),
|
||||||
.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
|
.await
|
||||||
.into_diagnostic()?;
|
.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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -401,7 +432,7 @@ pub async fn publish_job_result(cfg: &MqConfig, result: &JobResult) -> Result<()
|
||||||
let confirm = channel
|
let confirm = channel
|
||||||
.basic_publish(
|
.basic_publish(
|
||||||
&cfg.exchange,
|
&cfg.exchange,
|
||||||
"jobresult.v1",
|
&cfg.results_routing_key,
|
||||||
BasicPublishOptions {
|
BasicPublishOptions {
|
||||||
mandatory: true,
|
mandatory: true,
|
||||||
immediate: false,
|
immediate: false,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "orchestrator"
|
name = "orchestrator"
|
||||||
version = "0.1.3"
|
version = "0.1.4"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue