如何创建仅具有 grpc 服务实现的 lagom 服务器?
How to create a lagom server with grpc service implementation only?
我正在尝试按照此 documentation 使用 Lagom 框架创建一个 grpc 服务。这里 hello
服务除了 grpc 服务外,还暴露了 rest API。
现在,在 ApplicationLoader 中创建 lagom 服务器时,我们将 grpc 服务实现分配为 additionalRouter
,如下所示:
abstract class HelloApplication(context: LagomApplicationContext)
extends LagomApplication(context)
with AhcWSComponents {
// Bind the service that this server provides
override lazy val lagomServer =
serverFor[HelloService](wire[HelloServiceImpl])
.additionalRouter(wire[HelloGrpcServiceImpl])
}
为了演示的目的一切都很好,但我们可能不需要总是创建除 gRPC 端点之外的 REST 端点。在那种情况下,我将不需要 HelloService
或 HelloServiceImpl
。问题是如何创建只有 HelloGrpcServiceImpl
的 lagom 服务器?我看不到找到任何文档或 APIs 本身能够实现此目的的方法!
请推荐。
根据我在 link 中作为对问题的评论提供的答案,解决方案如下所示:
trait PrimeGeneratorService extends Service {
override def descriptor: Descriptor = named("prime-generator")
}
class PrimeGeneratorServiceImpl() extends PrimeGeneratorService
abstract class PrimeGeneratorApplication(context: LagomApplicationContext)
extends LagomApplication(context) with AhcWSComponents {
override lazy val lagomServer: LagomServer = {
serverFor[PrimeGeneratorService](wire[PrimeGeneratorServiceImpl])
.additionalRouter(wire[PrimeGeneratorGrpcServiceImpl])
}
}
class PrimeGeneratorLoader extends LagomApplicationLoader {
override def load(context: LagomApplicationContext): LagomApplication =
new PrimeGeneratorApplication(context) {
override def serviceLocator: ServiceLocator = NoServiceLocator
}
override def loadDevMode(context: LagomApplicationContext): LagomApplication =
new PrimeGeneratorApplication(context) with LagomDevModeComponents
override def describeService = Some(readDescriptor[PrimeGeneratorService])
}
这里我们必须创建虚拟服务特征和实现,分别是PrimeGeneratorService
和PrimeGeneratorServiceImpl
。
不要忘记在加载程序中添加以下内容 class:
override def describeService = Some(readDescriptor[PrimeGeneratorService])
我正在尝试按照此 documentation 使用 Lagom 框架创建一个 grpc 服务。这里 hello
服务除了 grpc 服务外,还暴露了 rest API。
现在,在 ApplicationLoader 中创建 lagom 服务器时,我们将 grpc 服务实现分配为 additionalRouter
,如下所示:
abstract class HelloApplication(context: LagomApplicationContext)
extends LagomApplication(context)
with AhcWSComponents {
// Bind the service that this server provides
override lazy val lagomServer =
serverFor[HelloService](wire[HelloServiceImpl])
.additionalRouter(wire[HelloGrpcServiceImpl])
}
为了演示的目的一切都很好,但我们可能不需要总是创建除 gRPC 端点之外的 REST 端点。在那种情况下,我将不需要 HelloService
或 HelloServiceImpl
。问题是如何创建只有 HelloGrpcServiceImpl
的 lagom 服务器?我看不到找到任何文档或 APIs 本身能够实现此目的的方法!
请推荐。
根据我在 link 中作为对问题的评论提供的答案,解决方案如下所示:
trait PrimeGeneratorService extends Service {
override def descriptor: Descriptor = named("prime-generator")
}
class PrimeGeneratorServiceImpl() extends PrimeGeneratorService
abstract class PrimeGeneratorApplication(context: LagomApplicationContext)
extends LagomApplication(context) with AhcWSComponents {
override lazy val lagomServer: LagomServer = {
serverFor[PrimeGeneratorService](wire[PrimeGeneratorServiceImpl])
.additionalRouter(wire[PrimeGeneratorGrpcServiceImpl])
}
}
class PrimeGeneratorLoader extends LagomApplicationLoader {
override def load(context: LagomApplicationContext): LagomApplication =
new PrimeGeneratorApplication(context) {
override def serviceLocator: ServiceLocator = NoServiceLocator
}
override def loadDevMode(context: LagomApplicationContext): LagomApplication =
new PrimeGeneratorApplication(context) with LagomDevModeComponents
override def describeService = Some(readDescriptor[PrimeGeneratorService])
}
这里我们必须创建虚拟服务特征和实现,分别是PrimeGeneratorService
和PrimeGeneratorServiceImpl
。
不要忘记在加载程序中添加以下内容 class:
override def describeService = Some(readDescriptor[PrimeGeneratorService])