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

Akka HTTP:如何与参与者拆分路由

上官霄
2023-03-14
object MyAPI {
  def props(): Props = Props(new MyAPI())
  val routes = pathPrefix("api") {
    pathPrefix("1") {
      SomeActor.route  //More routes can be appended here using ~

    }
  }
}

final class MyAPI extends Actor with ActorLogging {

  implicit lazy val materializer = ActorMaterializer()
  implicit lazy val executionContext = context.dispatcher

  Http(context.system)
    .bindAndHandleAsync(Route.asyncHandler(MyAPI.routes), MyHttpServer.httpServerHostName, MyHttpServer.httpServerPort)
    .pipeTo(self)

  override def receive: Receive = {
    case serverBinding: ServerBinding =>
      log.info(s"Server started on  ${serverBinding.localAddress}")
      context.become(Actor.emptyBehavior)
    case Status.Failure(t) =>
      log.error(t, "Error binding to network interface")
      context.stop(self)
  }
}
object SomeActor {

  def props(): Props = Props[SomeActor]
  val route = get {
    pathPrefix("actor") {
      pathEnd {
        complete("Completed") //Is there a clean way 'ask' the actor below?
      }
    }
  }

}

class SomeActor extends Actor with ActorLogging {
  implicit lazy val executionContext = context.dispatcher;



  override def receive: Receive = {
    //receive and process messages here

  }

```

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

共有1个答案

冀阳文
2023-03-14

我想建议你在功能的基础上,你可以有很多演员,你想要的,但创建一个监督演员,将监视每个儿童演员。所有的监督策略都应该写入监督器本身,所有你要发送给演员的消息都应该由监督器转发。

一旦从endpoint获取数据,可能是get或post方法将数据放入someRequest case类。然后将其发送到某个handleReq()方法。然后在功能的基础上进行处理。

您可以这样构造项目。src/actor//所有参与者都将在此包中

 类似资料:
  • 有人能解释一下(如果可能的话,用一些代码或参考)独立路由器和自包含的路由器参与者之间有什么区别吗? 提前谢谢你。 编辑: 与此相比有何不同?: 在性能或能力方面有什么区别吗?

  • 例如,我有两个演员——一个家长演员和一个孩子演员。当父级收到消息时,它会产生消息中指定的尽可能多的子角色。如何测试此功能?有没有一种方法可以模拟上下文,或者其他一些方法来检查参与者的创建是否正确和数量是否正确? 更新:基于@Tim answer的解决方案 更改类别: 测试:

  • 我很难弄清楚我如何知道我的演员何时从非演员代码中完成。 尝试使用akka演员进行并行执行,这似乎真的很好,但我需要知道何时所有人都完成了。 我添加了一个监督者演员,产生演员来做工作,从监督者/父演员,我可以观看孩子的终止消息。 我需要从akka actor系统之外的常规java代码中得到帮助,以确定我的监督actor是否完成。 这是否可能,请提供指针。 谢谢哈瑞

  • 我想让我的主演员在第一个演员完成工作后立即终止所有的奴隶演员<然而,我不知道怎样才能从我的主人那里向所有的奴隶发送广播。这有函数或编程模式吗? 解决这个问题的另一种方法可能是给主人一个所有奴隶的列表,并循环通过它们,给每个奴隶发送一条终止消息,但是奴隶也需要主人作为属性,我认为这是一个问题: 此代码不编译。 错误消息: Actor线程Actor线程2 java中发生异常。lang.NullPoin

  • 参与者可以使用API或命令行添加到参与者库中。 在你开始之前 在你执行这些步骤之前,你在业务网络定义中必须建模一个参与者,并将其部署为业务网络。 下面的过程显示了一个使用以下数字财产范例业务网络定义的参与者模型的示例:digitalproperty-network 请注意:如果你使用composer participant add命令添加参与者,请确保参与者的JSON陈述包裹在单引号中。 name

  • 下面是WebPack4配置代码: 新的配置代码从项目中使用的节点模块中获取所有代码。但我只希望拆分供应商库(我在enrtry配置部分定义),而不希望拆分node_modules中的所有代码。 在本例中:“babel-polyfill”,“react”,“react-dom”,“jquery”,“bootstrap”