code refactor
Some checks failed
CI / Check / Test (push) Has been cancelled

Reviewed-on: #26
This commit was merged in pull request #26.
This commit is contained in:
2026-10-26 09:36:23 +00:00
parent 2ce7db12c2
commit 017b58d6fa
804 changed files with 33423 additions and 28955 deletions

View File

@@ -1,52 +1,38 @@
mod config;
mod consumer;
mod payload;
mod publisher;
mod relay;
mod subject;
pub use config::{NatsConfig, NatsMode};
pub use consumer::{NatsCoreConsumer, NatsJetStreamConsumer};
pub use publisher::NatsEventPublisher;
pub use relay::NatsRelaySink;
use std::sync::Arc;
use domain::ports::{EventConsumer, EventPublisher};
use domain::ports::{EventConsumer, EventRelaySink};
pub async fn create_publisher(cfg: NatsConfig) -> anyhow::Result<Arc<dyn EventPublisher>> {
let client = async_nats::connect(&cfg.url).await?;
let publisher: Arc<dyn EventPublisher> = match cfg.mode {
NatsMode::Core => Arc::new(NatsEventPublisher::new_core(client, cfg.subject_prefix)),
NatsMode::JetStream => Arc::new(NatsEventPublisher::new_jetstream(
client,
cfg.subject_prefix,
)),
};
tracing::info!("NATS publisher created (mode: {:?})", cfg.mode);
Ok(publisher)
}
pub async fn create_channel(
pub async fn create_bus(
cfg: NatsConfig,
) -> anyhow::Result<(Arc<dyn EventPublisher>, Arc<dyn EventConsumer>)> {
) -> anyhow::Result<(Arc<dyn EventConsumer>, Arc<dyn EventRelaySink>)> {
let client = async_nats::connect(&cfg.url).await?;
let publisher: Arc<dyn EventPublisher> = match cfg.mode {
NatsMode::Core => Arc::new(NatsEventPublisher::new_core(
client.clone(),
cfg.subject_prefix.clone(),
)),
NatsMode::JetStream => Arc::new(NatsEventPublisher::new_jetstream(
client.clone(),
cfg.subject_prefix.clone(),
)),
let (consumer, sink): (Arc<dyn EventConsumer>, Arc<dyn EventRelaySink>) = match cfg.mode {
NatsMode::Core => {
tracing::info!(
"core NATS mode: no broker-side dedup or redelivery; relying on consumer ledger"
);
(
Arc::new(NatsCoreConsumer::create(&cfg, client.clone()).await?),
Arc::new(NatsRelaySink::new_core(client, cfg.subject_prefix)),
)
}
NatsMode::JetStream => (
Arc::new(NatsJetStreamConsumer::create(&cfg, client.clone()).await?),
Arc::new(NatsRelaySink::new_jetstream(client, cfg.subject_prefix)),
),
};
let consumer: Arc<dyn EventConsumer> = match cfg.mode {
NatsMode::Core => Arc::new(NatsCoreConsumer::create(&cfg, client).await?),
NatsMode::JetStream => Arc::new(NatsJetStreamConsumer::create(&cfg, client).await?),
};
tracing::info!("NATS channel created (mode: {:?})", cfg.mode);
Ok((publisher, consumer))
tracing::info!("NATS bus created (mode: {:?})", cfg.mode);
Ok((consumer, sink))
}