我有一个运行在prem上的遗留服务,并构建了一个运行在云上的新服务,该服务提供了相同的功能。我有另一个java (spring)服务,它使用another服务。这个on服务公开了许多apis,这些apis在消费应用程序中的多个地方被调用。为了准备迁移到提供确切的apis集的新服务,我定义了一个外部切换(使用服务器)。为了将流量从遗留点翻转到云端点,我所需要做的就是更新属性文件中的标志。
我目前有一个服务定位器,它有一个that模板,用于调用遗留端点。在调用云端点时,我需要更新不同的标头值集。有什么java设计模式可以用来调用云端点吗?
发布于 2018-10-16 11:17:06
您可以通过混合策略模式和命令模式来实现这种方法。
您可以为服务方法(S)、服务代理类、配置类和进行服务调用的类定义类(Es)。
定义服务方法的接口:
public interface IServiceMethod {
void setClient(Service service);
Object execute();
}为服务方法创建类:
public class SomeMethod implements IServiceMethod {
private Service service;
public SomeMethod() {
}
@Override
public void setClient(Service service) {
this.client = client;
}
@Override
public T execute() {
return client.getService().someMethod();
}
}定义配置类:
public class ServiceConfiguration {
private String endPointUrl;
private EnvironmentType envType; //DEV,TEST,PROD
private String userName;
private String password;
private boolean isActive;
}定义要包装服务的类及其配置:
public interface IServiceProxy {
Service getService();
ServiceConfiguration getConfiguration();
}使用配置构造服务代理,并从某个提供者获取端点(和其他所需的配置数据):
public class ServiceProxy implements IServiceProxy {
private Service service;
private ServiceConfiguration configuration;
public ServiceProxy(ServiceConfiguration serviceConfiguration) {
this.service = someFactory.getInstance().getClient(serviceConfiguration);
this.serviceConfiguration = serviceConfiguration;
}
@Override
public Service getService() {
return service;
}
@Override
public ServiceConfiguration getConfiguration() {
return configuration;
}
}用方法构造MethodExecutor:
public class MethodExecutor{
private IServiceMethod iServiceMethod;
public MethodExecutor(IServiceMethod iServiceMethod) {
this.iServiceMethod = iServiceMethod;
}
public Object execute() {
return iServiceMethod.execute();
}
}https://softwareengineering.stackexchange.com/questions/380076
复制相似问题