我正在拉古姆项目中创建一个模块 . 我的模块只有kafka使用者在cassandra中消费消息和存储消息事件 . 谢谢,为什么,在我的 LagomApplicationLoader
中我没有定义任何服务并使用 LagomServer.forServices()
初始化 lagomServer
为空 . 但每当我开始申请时,我都会遇到以下异常:
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中声明空服务 . 如果不可能,还有哪些替代方案?因为在将来可能需要在此模块中创建一些服务 . 我该如何解决这个问题?
1 回答
当您没有要绑定的任何服务时,您应该声明
ServiceInfo
.此外,对于仅从Kafka消费并且不发布其主题的服务,仅需要混合
LagomKafkaClientComponents
而不是LagomKafkaComponents
.LagomKafkaClientComponents
不需要LagomServer
,只需要ServiceInfo
.您可以为不包含任何此类服务的简单使用者声明
ServiceInfo
:其中
clientName
是此项目的唯一标识字符串,用于命名Kafka客户端ID和默认使用者组ID . 在此示例中,您可以使用"twitterConsumer"
.http://www.lagomframework.com/documentation/1.3.x/scala/ServiceInfo.html有关于
ServiceInfo
的更多信息 .