当前位置: 首页 > 知识库问答 >
问题:

如何使用特性聚合akka-http路由?

唐沈义
2023-03-14

我试图在运行时使用一个特性聚合路由,到目前为止

object SMController {
  def aggregateRoutes(actorSystem: ActorSystem): List[Route] = {
    val runtimeMirror = universe.runtimeMirror(getClass.getClassLoader)
    val reflections = new Reflections("com.example.api")
    val subclasses = reflections.getSubTypesOf(classOf[Routable])
    val routesList = new ListBuffer[Route]()

    for (i <- subclasses) {
      val module = runtimeMirror.staticModule(i.getName)
      val obj = runtimeMirror.reflectModule(module)
      val someTrait: Routable = obj.instance.asInstanceOf[Routable]
      routesList += someTrait.getAllRoutes(actorSystem)
    }

    routesList.toList
  }
}

显然,上面的代码不起作用,因为项目列表不能传递给http().bindandhandle

所以我的问题是,如何将列表[Routes]解析为HTTP().bindandhandle接受,或者如何从routable的子类动态加载路由?

共有1个答案

彭宜人
2023-03-14

foldLeft:我已经成功地将路由折叠并合并所有路由,如下所示

val routes = SMController.aggregateRoutes(system)
val bindingFuture = Http().bindAndHandle(
        routes.tail.foldLeft(routes.head)((a, b) => a ~ b), "localhost", 8080)

ReduceLeft:

routes.reduceLeft(_ ~ _)
 类似资料:
  • 我正在尝试写一个简单的路线系列,下面是我想要发生的事情: 我几乎什么都试过了,却不知道该怎么办。这方面的文档很难理解。 谁能给我指点一下吗?

  • ``` 所以,我的问题是--有没有一种干净的方法来结构和重构路由,而不是将它们集中在一个大的路由定义中?我也许可以创建一个参与者(路由器)的层次结构,主路由定义只是将其委托给路由器,随着我们深入参与者层次结构,我们会逐步添加更多的细节。但是否有一两种普遍接受的模式来组织路线呢?

  • 我正在尝试使用swagger记录akka-超文本传输协议API 我拥有的是: 这会生成一个json,我可以在swagger UI中查看它。但是,我不能使用生成的示例,因为缺少auth选项。 我没有找到任何使用swagger-akka-http的例子,只有一些使用 config的例子 在< code>yaml中,可能是这样的: 但是,我没有。除了通过注释之外,我也不能控制生成的。 在IIUC中,提及

  • 介绍 链路聚合是在两个设备间使用多个物理链路创建一个逻辑链路的功能。这种方式允许物理链路间共享负载。交换机网络中使用的一种链路聚合的方法是EtherChannel。EtherChannel可以通过思科的端口聚合协议(Port Aggregation Protocol, PAgP)或链路聚合协议(Link Aggregation Protocol, LACP)来配置或协商。 更多信息 EtherCh

  • 我不确定这是否是正确的方法,或者即使这是一个好的方法,或者我是否应该使用一个actor与路由交互,使用ask模式,然后在actor内部流式处理所有内容。 有什么想法吗?