feat(registry): add service discovery and health check capabilities
- Integrate tonic-health for gRPC service health monitoring - Add etcd-based service registration with automatic keep-alive - Implement dynamic configuration loading from etcd with fallback - Remove external dependencies from docker-compose for simplified deployment - Refactor service registration logic with improved lease management - Add health service to gRPC server with serving status reporting
This commit is contained in:
+26
@@ -116,6 +116,32 @@ impl EtcdRegistry {
|
||||
ids.sort();
|
||||
ids
|
||||
}
|
||||
|
||||
/// Read config from etcd. Priority: etcd > env > default.
|
||||
/// This is async but can be called from sync context via block_on.
|
||||
pub async fn get_config(&self, key: &str, default: &str) -> String {
|
||||
let etcd_key = format!("{}config/{}", self.inner.key_prefix, key);
|
||||
let mut client = self.inner.client.lock().await;
|
||||
if let Ok(resp) = client.get(etcd_key.as_str(), None).await {
|
||||
if let Some(kv) = resp.kvs().first() {
|
||||
if let Ok(v) = kv.value_str() {
|
||||
if !v.is_empty() {
|
||||
tracing::info!(key, value = v, "config from etcd");
|
||||
return v.to_string();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
drop(client);
|
||||
// Fall back to env
|
||||
if let Ok(v) = std::env::var(key) {
|
||||
if !v.is_empty() {
|
||||
return v;
|
||||
}
|
||||
}
|
||||
default.to_string()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// Derive a deterministic UUID from a gitks storage_name.
|
||||
|
||||
Reference in New Issue
Block a user