2017-02-19 38 views
0

我在lagom项目中创建了一个模块。我的模块只有卡夫卡消费者消费消息并将消息事件存储在卡桑德拉中。感谢为什么,在我的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] 
} 

我怎样才能在lagom声明空服务。如果这是不可能的,还有什么其他的选择?因为将来可能需要在本模块中创建一些服务。我该如何解决这个问题?

回答

0

如果您没有任何绑定服务,则应该声明ServiceInfo

此外,对于只从卡夫卡消费的服务,不发布自己的话题,只需要混合LagomKafkaClientComponents而不是LagomKafkaComponentsLagomKafkaClientComponents不需要LagomServer,只有ServiceInfo

你可以声明ServiceInfo一个简单的消费不包括任何像这样的服务:

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

哪里clientName是这个项目用来命名卡夫卡客户端ID和默认的一个独特的,标识字符串消费者组ID。在这个例子中你可以使用"twitterConsumer"

http://www.lagomframework.com/documentation/1.3.x/scala/ServiceInfo.html有关于ServiceInfo的更多信息。