2017-10-06 4 views
0

Ich habe REST-Vorlage verwendet, um REST-APIs viele Male aufzurufen. Aber ich frage mich, gibt es einen Weg zur Unterscheidung zwischen lokalen und Netzwerkanruf.Spring Boot Rest Vorlage, unterscheiden lokale und Netzwerkanruf

Zum Beispiel: Wenn der REST-URI zum API-Aufruf der gleichen Anwendung aufgelöst wird, kann der Controller/Service-Methode aufgerufen werden. Wenn es jedoch nicht verfügbar ist, kann ein Netzwerkanruf getätigt werden.

P.S. Ich weiß, wir können dies tun, indem wir einen Spring-Cache verwenden, um alle Dienste der aktuellen Anwendung aufzulisten. Aber ich frage mich, ob Spring REST-Vorlage oder ein anderes Framework bietet diese Funktion out-of-the-box.

Antwort

0

RestTemplate unterstützt nicht, was Sie OOTB erreichen möchten.

Es klingt jedoch, als ob Sie einen RPC-Mechanismus in irgendeiner Art implementieren möchten.

Lasst uns sagen, dass Sie ServiceInterface als die Service-Schnittstelle haben, ServiceStubImpl als die lokale Stub Dienst (Client) und ServiceImpl die konkrete Umsetzung vor Ort.

An den Stellen, wo Sie Anrufe in Richtung ServiceImpl Sie machen verwenden ServiceInterface offensichtlich, die die Umsetzung selbst oder ServiceStubImpl sein könnte tatsächlich die aus der Ferne den Anruf macht. Letzterer kann RestTemplate innerhalb anderer Arten von Transportmechanismus Ihrer Wahl verwenden.

Ihr spezieller Anwendungsfall scheint zu sein, dass Sie nicht wissen, ob ServiceImpl lokal verfügbar ist oder nicht, aber wenn dies der Fall ist, möchten Sie das direkt anrufen, anstatt Netzwerk-Roundtrips durchzuführen.

All dies ähnelt sehr den automatischen Konfigurationsmechanismen von Spring Boot, bei denen bestimmte Klassen im Klassenpfad gesucht werden und die erforderlichen Initialisierungen und Verdrahtungen durchgeführt werden, sofern sie verfügbar sind.

Das heißt, Frühlings-Boot-Mechanismus für Ihren Anwendungsfall die Anwendung wie dies als Beispiel aussehen:

@Configuration 
class SeviceConfig { 

    @Bean 
    @ConditionalOnMissingClass(name = "your.app.ServiceImpl") 
    ServiceInterface service() { 
    return new ServiceStubImpl(...); 
    } 

} 

Sie können Ihre eigene Auto-Konfiguration mit Frühlings-Boot hier mehr lesen über das Erstellen von: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html

+0

Danke für Ihre Antwort. Dies kann getan werden. Aber ich bin auf der Suche nach einem Werkzeug, das intern so etwas tun würde. –

+0

Wie ich in der Frage erwähnt habe, können wir mit Federcache so etwas machen –