2017-02-19 6 views
0

Ich bin ein Modul in Lagom Projekt erstellen. Mein Modul hat nur Kafka Consumer für den Konsum von Nachrichten und das Speichern von Nachrichtenereignissen in Cassandra. Danke, warum, in meinem LagomApplicationLoader Ich definiere keinen Service und initialisiere lagomServer leer mit LagomServer.forServices(). Aber wann immer, ich bin meine Anwendung starten, erhalte ich folgende Ausnahme:Lagom Server: java.lang.IllegalArgumentException

java.lang.IllegalArgumentException 
    at com.lightbend.lagom.scaladsl.server.LagomServer$$anon$2.<init>(LagomServer.scala:35) 
    at com.lightbend.lagom.scaladsl.server.LagomServer$.forServices(LagomServer.scala:31) 
    at com.knoldus.consumer.impl.TwitterConsumerApplication.lagomServer$lzycompute(TwitterConsumerLoader.scala:33) 
    at com.knoldus.consumer.impl.TwitterConsumerApplication.lagomServer(TwitterConsumerLoader.scala:33) 
    at com.lightbend.lagom.scaladsl.server.LagomApplication.<init>(LagomApplicationLoader.scala:187) 
    at com.knoldus.consumer.impl.TwitterConsumerApplication.<init>(TwitterConsumerLoader.scala:28) 
    at com.knoldus.consumer.impl.TwitterConsumerLoader$$anon$1.<init>(TwitterConsumerLoader.scala:25) 
    at com.knoldus.consumer.impl.TwitterConsumerLoader.loadDevMode(TwitterConsumerLoader.scala:25) 
    at com.lightbend.lagom.scaladsl.server.LagomApplicationLoader.load(LagomApplicationLoader.scala:54) 
    at play.core.server.LagomReloadableDevServerStart$$anonfun$mainDev$1$$anon$2$$anonfun$get$1$$anonfun$apply$1$$anonfun$2$$anonfun$3.apply(LagomReloadableDevServerStart.scala:151) 
    at play.core.server.LagomReloadableDevServerStart$$anonfun$mainDev$1$$anon$2$$anonfun$get$1$$anonfun$apply$1$$anonfun$2$$anonfun$3.apply(LagomReloadableDevServerStart.scala:148) 
    at play.utils.Threads$.withContextClassLoader(Threads.scala:21) 
    at play.core.server.LagomReloadableDevServerStart$$anonfun$mainDev$1$$anon$2$$anonfun$get$1$$anonfun$apply$1$$anonfun$2.apply(LagomReloadableDevServerStart.scala:148) 
    at play.core.server.LagomReloadableDevServerStart$$anonfun$mainDev$1$$anon$2$$anonfun$get$1$$anonfun$apply$1$$anonfun$2.apply(LagomReloadableDevServerStart.scala:124) 
    at scala.Option.map(Option.scala:146) 
    at play.core.server.LagomReloadableDevServerStart$$anonfun$mainDev$1$$anon$2$$anonfun$get$1$$anonfun$apply$1.apply(LagomReloadableDevServerStart.scala:124) 
    at play.core.server.LagomReloadableDevServerStart$$anonfun$mainDev$1$$anon$2$$anonfun$get$1$$anonfun$apply$1.apply(LagomReloadableDevServerStart.scala:122) 
    at scala.util.Success.flatMap(Try.scala:231) 
    at play.core.server.LagomReloadableDevServerStart$$anonfun$mainDev$1$$anon$2$$anonfun$get$1.apply(LagomReloadableDevServerStart.scala:122) 
    at play.core.server.LagomReloadableDevServerStart$$anonfun$mainDev$1$$anon$2$$anonfun$get$1.apply(LagomReloadableDevServerStart.scala:114) 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) 
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) 
    at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402) 
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) 
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) 
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) 
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) 

Mein Code:

class TwitterConsumerLoader extends LagomApplicationLoader { 

    override def load(context: LagomApplicationContext): LagomApplication = 
    new TwitterConsumerApplication(context) { 
     override def serviceLocator = NoServiceLocator 
    } 

    override def loadDevMode(context: LagomApplicationContext): LagomApplication = 
    new TwitterConsumerApplication(context) with LagomDevModeComponents 
} 

abstract class TwitterConsumerApplication(context: LagomApplicationContext) extends LagomApplication(context) 
    with CassandraPersistenceComponents with AhcWSComponents with LagomKafkaComponents { 

    lazy val twitterService = serviceClient.implement[TwitterProducerService] 

    override lazy val lagomServer = LagomServer.forServices() 
    override lazy val jsonSerializerRegistry = TwitterSerializerRegistry 

    persistentEntityRegistry.register(wire[TweetEntity]) 
    wire[TwitterProducerSubscriber] 
} 

Wie kann ich leer Dienste in lagom erklären. Wenn das nicht möglich ist, was sind die anderen Alternativen? Weil es möglicherweise in Zukunft erforderlich sein kann, einige Dienste in diesem Modul zu erstellen. Wie kann ich dieses Problem lösen?

Antwort

0

Wenn Sie keine zu bindenden Dienste haben, sollten Sie stattdessen eine ServiceInfo deklarieren.

Für einen Dienst, der nur von Kafka konsumiert und keine eigenen Themen veröffentlicht, ist es nur notwendig, LagomKafkaClientComponents anstelle von LagomKafkaComponents zu mischen. LagomKafkaClientComponents erfordert keine LagomServer, nur eine ServiceInfo.

Sie können ServiceInfo für einen einfachen Verbraucher erklären, dass keine Dienste wie folgt enthält:

override lazy val serviceInfo = ServiceInfo(clientName, Map.empty) 

Wo clientName ein eindeutig zuzuordnen sind, für dieses Projekt zu identifizieren Zeichenfolge, die verwendet wird, um die Kafka-Client-ID und Standard zu nennen Verbrauchergruppen-ID Sie könnten "twitterConsumer" in diesem Beispiel verwenden.

http://www.lagomframework.com/documentation/1.3.x/scala/ServiceInfo.html hat weitere Informationen auf ServiceInfo.

Verwandte Themen