2016-04-12 14 views
2

Ich kann nicht in drei Fällen denken.Wie Lagom-Dienste andere Dienste verbrauchen?

  1. Lagom Dienst verbraucht weiteren Lagom Dienst im gleichen Cluster
  2. Lagom Dienst verbraucht weiteren Lagom Dienst in einem anderen Cluster
  3. Lagom Dienst
  4. Einen externen nicht-Lagom Dienst einen externen Nicht-Lagom Dienst verbraucht verbraucht einen Lagom Service

1. Lagom Dienst eines anderen Lagom Dienst im gleichen Cluster verbraucht

Für diesen Fall ist der Ansatz, dass ServiceAImpl von der ServiceB API abhängt, die an eine konkrete Implementierung gebunden ist, die in ServiceAImpl eingefügt wird.

ServiceB binding:

import com.google.inject.AbstractModule; 
import com.lightbend.lagom.javadsl.server.ServiceGuiceSupport; 
import docs.services.HelloService; 

public class Module extends AbstractModule implements ServiceGuiceSupport { 

    protected void configure() { 
     bindClient(HelloService.class); 
    } 
} 

ServiceA implementation:

public class MyServiceImpl implements MyService { 
    private final HelloService helloService; 

    @Inject 
    public MyServiceImpl(HelloService helloService) { 
    this.helloService = helloService; 
    } 

    @Override 
    public ServiceCall<NotUsed, NotUsed, String> sayHelloLagom() { 
    return (id, msg) -> { 
     CompletionStage<String> response = helloService.sayHello().invoke("Lagom"); 
     return response.thenApply(answer -> 
      "Hello service said: " + answer 
    ); 
    }; 
    } 
} 

Wenn ich es verstehen, um die Service-API auf diese Weise zu verbrauchen, müssen beide Clients im gleichen Cluster richtig. jedoch Lagom says dass

Ein Cluster sollte nur Spanne Knoten, die denselben Dienst ausgeführt werden.

In diesem Fall haben wir zwei verschiedene Arten von Diensten.

  • "Derselbe Service" bedeutet einen Top-Level-Service, dessen API externen Services ausgesetzt ist?
  • In Lagom 1 Microservice = 1 Service mit externer API + n interne Dienste?

2. Lagom Dienst verbraucht einen anderen Lagom Dienst in einem anderen Cluster

Die Dokumentation says:

Beachten Sie, dass, wenn der Dienst Sie ist eigentlich ein Lagom Dienst kommunizieren wollen Vielleicht möchten Sie die Dokumentation für integrating with an external Lagom projects lesen.

Warum wird nur die Abhängigkeit zur Service-API konfiguriert und nicht die IP und der Port des externen Lagom-Dienstes?

3. Lagom Dienst verbraucht einen externen Nicht-Lagom Service

Das erste, was Sie tun müssen, ist, jeden externen Dienst im Service Locator zu registrieren.Angenommen, wir ein externes Dienst namens Wetter registrieren möchten, die auf http://localhost:3333 laufen, hier ist, was wir zu dem Build hinzufügen würden:

lagomUnmanagedServices in ThisBuild := Map("weather" -> "http://localhost:3333") 

Was ist der Vertrag mit dieser IP? Was sollte dahinter stehen?

4. Ein externer Nicht-Lagom Dienst verbraucht Lagom Service

Ich habe die Third-Party Registration Pattern bis Lagom unterstützt die self registration pattern benutzen?

+0

Ich finde Ihre Frage, so verwirrend ... –

+0

stimme zu, dass viele der hohen Ebene Lagom docs entkoppelte Dienste zu diskutieren, während die Bereitstellung die Einfachheit von 1 Cluster vermittelt .... – Matt

Antwort

1

Wenn Lagom über "Cluster" spricht, bezieht es sich auf Akka-Cluster. Jeder Dienst kann als ein Akka-Cluster bereitgestellt werden, d. H. Ein Dienst kann ein Cluster von Knoten sein. Sie verfügen also nicht über mehrere Dienste in einem Cluster, sondern nur über einen gruppierten Dienst.

Lagom-Serviceaufrufe lassen sich auf einfache Weise auf idiomatische REST-Karten abbilden. Wenn Sie also mit einem externen Dienst sprechen, sollte die IP-Adresse ein REST-Dienst sein. Wenn ein externer Dienst mit Lagom kommuniziert, sollte REST ebenfalls verwendet werden.

+0

Danke für die Antwort @James. Wird im Fall von Punkt (1) nicht HelloService im selben Cluster wie MyServiceImpl ausgeführt? – gabrielgiussi