mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-07 19:22:14 +09:00
60 lines
2.2 KiB
Rust
60 lines
2.2 KiB
Rust
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
mod router_impl;
|
|
mod shard_impl;
|
|
mod types;
|
|
|
|
use fluxer_svc::config::{DatabaseBackend, Mode, ServiceConfig};
|
|
use fluxer_svc::transport::NatsTransport;
|
|
use router_impl::UsersRouter;
|
|
use shard_impl::UsersShard;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
fluxer_svc::init_tracing();
|
|
let config = ServiceConfig::from_env()?;
|
|
let transport =
|
|
NatsTransport::connect(&config.nats_url, config.nats_auth_token.as_deref()).await?;
|
|
|
|
tracing::info!(
|
|
service = config.service_name,
|
|
mode = ?config.mode,
|
|
shard_id = config.shard_id,
|
|
shard_count = config.shard_count,
|
|
listen_addr = %config.listen_addr,
|
|
"starting users service"
|
|
);
|
|
|
|
match config.mode {
|
|
Mode::Router => fluxer_svc::router::run_router(&config, UsersRouter, transport).await,
|
|
Mode::Shard => {
|
|
let shard = match config.database_backend {
|
|
DatabaseBackend::Postgres => {
|
|
let postgres_config =
|
|
fluxer_svc::postgres::PostgresConfig::from_service_config(&config);
|
|
let pool = fluxer_svc::postgres::connect(&postgres_config).await?;
|
|
let kv = fluxer_svc::postgres::KvClient::new(pool, &postgres_config)?;
|
|
UsersShard::new_postgres(kv, config.cache_max_entries, config.cache_ttl)
|
|
}
|
|
DatabaseBackend::Cassandra => {
|
|
#[cfg(feature = "scylla")]
|
|
{
|
|
let scylla_config =
|
|
fluxer_svc::scylla::ScyllaConfig::from_service_config(&config);
|
|
let db = fluxer_svc::scylla::connect(&scylla_config).await?;
|
|
UsersShard::new_scylla(db, config.cache_max_entries, config.cache_ttl)
|
|
.await?
|
|
}
|
|
#[cfg(not(feature = "scylla"))]
|
|
{
|
|
anyhow::bail!(
|
|
"FLUXER_DATABASE_BACKEND=cassandra requires the scylla feature"
|
|
);
|
|
}
|
|
}
|
|
};
|
|
fluxer_svc::shard::run_shard(&config, shard, transport).await
|
|
}
|
|
}
|
|
}
|