You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.2 KiB

package com.soa.bus;
import com.soa.service.Service;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 服务总线 - 负责服务的注册、发现和路由
*/
public class ServiceBus {
private static final Logger logger = LogManager.getLogger(ServiceBus.class);
private static ServiceBus instance;
private final Map<String, Service> serviceRegistry = new ConcurrentHashMap<>();
private ServiceBus() {}
/**
* 获取服务总线单例
*/
public static synchronized ServiceBus getInstance() {
if (instance == null) {
instance = new ServiceBus();
}
return instance;
}
/**
* 注册服务
*/
public void registerService(Service service) {
String serviceName = service.getName();
serviceRegistry.put(serviceName, service);
logger.info("Service registered: {}", serviceName);
}
/**
* 注销服务
*/
public void unregisterService(String serviceName) {
serviceRegistry.remove(serviceName);
logger.info("Service unregistered: {}", serviceName);
}
/**
* 调用服务
*/
public String callService(String serviceName, String request) {
Service service = serviceRegistry.get(serviceName);
if (service == null) {
logger.error("Service not found: {}", serviceName);
return "Error: Service not found - " + serviceName;
}
if (!service.isAvailable()) {
logger.error("Service not available: {}", serviceName);
return "Error: Service not available - " + serviceName;
}
logger.info("Routing request to service: {}", serviceName);
return service.execute(request);
}
/**
* 检查服务是否可用
*/
public boolean isServiceAvailable(String serviceName) {
Service service = serviceRegistry.get(serviceName);
return service != null && service.isAvailable();
}
/**
* 获取已注册的服务数量
*/
public int getRegisteredServiceCount() {
return serviceRegistry.size();
}
}