use ri::service_mesh::{RiServiceMesh, RiServiceMeshConfig, RiServiceDiscovery, RiServiceInstance, RiServiceStatus};
use ri::core::RiResult;
fn main() -> RiResult<()> {
println!("=== Ri Service Mesh Module Example ===\n");
let rt = tokio::runtime::Runtime::new().unwrap();
rt.block_on(async {
let config = RiServiceMeshConfig::new()
.with_service_name("ri-example")
.with_namespace("default")
.with_instance_id("instance-001")
.with_host("localhost")
.with_port(8080)
.with_health_check_interval_secs(30)
.with_failure_threshold(3)
.with_recovery_threshold(2)
.build();
println!("1. Creating service mesh...");
let service_mesh = RiServiceMesh::new(config).await?;
println!(" Service mesh initialized\n");
println!("2. Registering service instance...");
let instance = RiServiceInstance::new(
"user-service".to_string(),
"localhost".to_string(),
8081,
"v1.0.0".to_string(),
);
service_mesh.register_instance(instance).await?;
println!(" User service registered\n");
println!("3. Registering another instance...");
let instance2 = RiServiceInstance::new(
"user-service".to_string(),
"localhost".to_string(),
8082,
"v1.0.0".to_string(),
);
service_mesh.register_instance(instance2).await?;
println!(" Second user service instance registered\n");
println!("4. Registering order service...");
let order_instance = RiServiceInstance::new(
"order-service".to_string(),
"localhost".to_string(),
8083,
"v1.0.0".to_string(),
);
service_mesh.register_instance(order_instance).await?;
println!(" Order service registered\n");
println!("5. Discovering services...");
let instances = service_mesh.discover_instances("user-service").await?;
println!(" Found {} user-service instance(s):", instances.len());
for instance in &instances {
println!(" - {}:{} (status: {:?})",
instance.host(),
instance.port(),
instance.status()
);
}
println!();
println!("6. Listing all registered services...");
let services = service_mesh.list_services().await?;
println!(" Registered services:");
for service in &services {
let instances = service_mesh.discover_instances(service).await?;
println!(" - {}: {} instance(s)", service, instances.len());
}
println!();
println!("7. Updating instance health...");
let instances = service_mesh.discover_instances("user-service").await?;
if let Some(first_instance) = instances.first() {
service_mesh.update_instance_health(
first_instance.id(),
RiServiceStatus::Healthy,
).await?;
println!(" Updated instance {} to Healthy\n", first_instance.id());
}
println!("8. Simulating health check...");
let health_report = service_mesh.run_health_checks().await?;
println!(" Health check completed:");
println!(" - Total checks: {}", health_report.total_checks());
println!(" - Passed: {}", health_report.passed_checks());
println!(" - Failed: {}\n", health_report.failed_checks());
println!("9. Getting service mesh statistics...");
let stats = service_mesh.get_statistics().await?;
println!(" Service mesh statistics:");
println!(" - Total instances: {}", stats.total_instances());
println!(" - Healthy instances: {}", stats.healthy_instances());
println!(" - Unhealthy instances: {}", stats.unhealthy_instances());
println!();
println!("10. Deregistering service...");
service_mesh.deregister_instance("user-service", "instance-001").await?;
println!(" Deregistered user-service instance-001\n");
println!("11. Final service discovery...");
let instances = service_mesh.discover_instances("user-service").await?;
println!(" Remaining user-service instances: {}\n", instances.len());
println!("=== Service Mesh Example Completed ===");
Ok::<(), RiError>(())
})?
}