2017-02-19 6 views
0

Я создаю модуль в проекте lagom. В моем модуле есть только потребитель kafka для потребления сообщений и хранения сообщений в кассандре. Спасибо, почему в моем LagomApplicationLoader я не определяю никаких сервисов и инициализирую lagomServer пустым с LagomServer.forServices(). Но всякий раз, когда я начинаю свою заявку, я получаю следующее исключение:Lagom Сервер: 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) 

Моего код:

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

Как я могу объявить пустые услуги в ЛАГЕ. Если это невозможно, каковы другие альтернативы? Поскольку это может быть в будущем, это может потребоваться для создания некоторой службы в этом модуле. Как я могу решить эту проблему?

ответ

0

Если у вас нет услуг по связыванию, вы должны вместо этого объявить ServiceInfo.

Кроме того, для обслуживания, которое потребляет только от Kafka и не публикует свои темы, его необходимо только в LagomKafkaClientComponents вместо LagomKafkaComponents. LagomKafkaClientComponents не требует LagomServer, только ServiceInfo.

Вы можете объявить ServiceInfo для простого потребителя, который не включает в себя какие-либо услуг, как это:

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

Где clientName является уникальной, выявляя строку для этого проекта, который используется назвать идентификатор клиента и по умолчанию Кафки идентификатор группы потребителей. В этом примере вы можете использовать "twitterConsumer".

http://www.lagomframework.com/documentation/1.3.x/scala/ServiceInfo.html имеет дополнительную информацию о ServiceInfo.

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