2016-04-12 4 views
2

Я не могу думать в трех случаях.Как услуги Lagom потребляют другие услуги?

  1. служба ЛАГ потребляет другую услугу ЛАГА в том же самом кластере
  2. служба ЛАГА потребляет другую услугу ЛАГА в другом кластере
  3. служба ЛАГА потребляет внешнюю службу без ЛАГА
  4. внешней службы без ЛАГА потребляет услугу ЛАГА

1. служба ЛАГ потребляет другую услугу ЛАГА в том же кластере

Для этого случая подход заключается в том, что ServiceAImpl зависит от API ServiceB, который привязан к конкретной реализации, которая будет введена в ServiceAImpl.

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

Если я правильно понимаю, для того, чтобы потреблять API службы в этом случае, как клиенты должны находиться в одном кластере. Однако ЛАГ says, что

кластер должен только пролет узлы, работающие под ту же услугу.

В этом случае у нас есть два разных типа услуг.

  • «Тот же сервис» означает службу верхнего уровня, API которой подвергается внешним службам?
  • В Lagom 1 Microservice = 1 сервис с внешними API + n внутренними службами?

2. Служба ЛАГ потребляет другую услугу ЛАГА в другом кластере

says Документация:

Обратите внимание, что если услуга вы хотите общаться с фактически услугой ЛАГА, вы можете прочитать документацию для integrating with an external Lagom projects.

Почему настраивается зависимость от API-интерфейса службы, а не от IP-порта и внешней службы Lagom?

3. Служба ЛАГ потребляет внешний сервис, не ЛАГ

Первого, что вы должны сделать, это зарегистрировать каждую внешнюю службы в Service Locator.Предположим, мы хотим зарегистрировать внешний сервис под названием погода, запущенного на http://localhost:3333, здесь является то, что мы хотели бы добавить к сборке:

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

Что такое контракт с этим IP? Что должно быть за этим?

4. Внешняя служба, не ЛАГ потребляет услугу ЛАГА

мне придется использовать Third-Party Registration Pattern до ЛАГА поддержки self registration pattern?

+0

Я нахожу ваш вопрос, так запутанный ... –

+0

согласен с тем, что многие из высокоуровневых документов Lagom обсуждают развязанные службы, а развертывание передает простоту 1 кластера .... – Matt

ответ

1

Когда Лагом рассказывает о «кластере», это относится к кластерам Акка. Каждая служба может быть развернута как кластер Akka, то есть служба может быть кластером узлов. Таким образом, у вас нет нескольких служб в кластере, у вас есть только одна кластерная служба.

Услуги службы звонков в Лагоме довольно прямолинейно преобразуются в идиоматический ОТДЫХ. Поэтому, разговаривая с внешним сервисом, вещь на этом IP должна быть службой REST. Аналогично, когда внешняя служба разговаривает с Лагомом, она должна использовать REST.

+0

Спасибо за ответ @James. В случае точки (1) не работает HelloService в том же кластере, что и MyServiceImpl? – gabrielgiussi

Смежные вопросы