Pattern di progettazione Java da utilizzare per il passaggio tra 2 diversi endpoint

0

Ho un servizio legacy che è in esecuzione on-prem e che ha creato un nuovo servizio che gira su cloud che offre la stessa funzionalità. Ho un altro servizio java (spring) che consuma il servizio on-prem. Ci sono un certo numero di apis esposti da questo servizio on-prem che viene chiamato in più punti all'interno dell'app consumatore. Per preparare la migrazione a un nuovo servizio che fornisce l'insieme esatto di apis, ho definito un commutatore esterno (utilizzando il server di configurazione di spring cloud). Per capovolgere il traffico da legacy a endpoint cloud, tutto ciò che devo fare è aggiornare il flag nel file delle proprietà.

Al momento ho un localizzatore di servizio che ha un resttemplate che effettua una chiamata all'endpoint precedente. Durante la chiamata all'endpoint cloud, devo aggiornare diversi set di valori di intestazione. C'è qualche schema di progettazione java che posso sfruttare per effettuare una chiamata all'endpoint del cloud?

    
posta Punter Vicky 15.10.2018 - 23:52
fonte

1 risposta

3

Puoi raggiungere questo approccio mescolando il modello di strategia e il modello di comando.

È possibile definire le classi per i metodi di servizio, una classe per il proxy di servizio, una classe per la configurazione e una classe per effettuare una chiamata di servizio.

Definisci un'interfaccia per i tuoi metodi di servizio:

public interface IServiceMethod {
    void setClient(Service service);

    Object execute();

}

Crea classi per i tuoi metodi di servizio:

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();

    }
}

Definisci una classe di configurazione:

public class ServiceConfiguration {
    private String endPointUrl;
    private EnvironmentType envType; //DEV,TEST,PROD
    private String userName;
    private String password;
    private boolean isActive;
}

Definisci una classe per avvolgere il servizio e la sua configurazione:

public interface IServiceProxy {

    Service getService();

    ServiceConfiguration getConfiguration();
}

Costruisci il tuo proxy di servizio con la configurazione e ottieni endpoint (e altri dati di configurazione necessari) da qualche fornitore:

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;
    }
}

Costruisci MethodExecutor con il metodo:

public class MethodExecutor{
    private IServiceMethod iServiceMethod;

    public MethodExecutor(IServiceMethod iServiceMethod) {
        this.iServiceMethod = iServiceMethod;
    }

    public Object execute() {
        return iServiceMethod.execute();
    }
}
    
risposta data 16.10.2018 - 13:17
fonte

Leggi altre domande sui tag