Refactor service registry and load balancer integration

- Pass service registry to load balancer for dependency injection -
Remove dynamic imports of service registry in load balancer - Update
service registration and health check logic - Enable token-service in
docker-compose and service config - Add room names and rooms proxy
endpoints - Improve logging for proxy requests and health checks -
Update deploy script project name to sa4cps - Add test script for
coroutine fix - Minor code cleanup and formatting
This commit is contained in:
rafaeldpsilva
2025-09-22 15:13:06 +01:00
parent 41b8753a92
commit 2008ea0e70
7 changed files with 148 additions and 136 deletions

View File

@@ -10,11 +10,12 @@ logger = logging.getLogger(__name__)
class LoadBalancer:
"""Simple load balancer for microservice requests"""
def __init__(self):
def __init__(self, service_registry=None):
# In a real implementation, this would track multiple instances per service
self.service_instances: Dict[str, List[str]] = {}
self.current_index: Dict[str, int] = {}
self.service_registry = service_registry
def register_service_instance(self, service_name: str, instance_url: str):
"""Register a new service instance"""
@@ -54,9 +55,11 @@ class LoadBalancer:
if strategy == "single":
# Default behavior - get the service URL from service registry
from service_registry import ServiceRegistry
service_registry = ServiceRegistry()
return await service_registry.get_service_url(service_name)
if self.service_registry:
return await self.service_registry.get_service_url(service_name)
else:
logger.error("No service registry available")
return None
elif strategy == "round_robin":
return await self._round_robin_select(service_name)
@@ -73,9 +76,11 @@ class LoadBalancer:
instances = self.service_instances.get(service_name, [])
if not instances:
# Fall back to service registry
from service_registry import ServiceRegistry
service_registry = ServiceRegistry()
return await service_registry.get_service_url(service_name)
if self.service_registry:
return await self.service_registry.get_service_url(service_name)
else:
logger.error("No service registry available for fallback")
return None
# Round-robin selection
current_idx = self.current_index[service_name]
@@ -92,9 +97,11 @@ class LoadBalancer:
instances = self.service_instances.get(service_name, [])
if not instances:
# Fall back to service registry
from service_registry import ServiceRegistry
service_registry = ServiceRegistry()
return await service_registry.get_service_url(service_name)
if self.service_registry:
return await self.service_registry.get_service_url(service_name)
else:
logger.error("No service registry available for fallback")
return None
selected_instance = random.choice(instances)
logger.debug(f"Random selected {selected_instance} for {service_name}")