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

我如何用Akka控制流?

袁子瑜
2023-03-14
class Dispatcher extends Actor {
  def receive = {
    case ResetPassword(to, data) => 
      senderActor ! Mail("resetPassword", to, data)
      Thread.sleep(5000)
    ...
  }
}
class Sender extends Actor {
  def receive = {
    case Mail(to, data) => // send the mail immediately
    ...
  }
}

走这条路对吗?如果没有,流量控制该怎么做?

共有1个答案

谭景福
2023-03-14

在不阻塞的情况下做到这一点的一种方法是拥有另一个在任何时候保持发件箱状态的执行元。

class Outbox extends Actor {

  var outbox: List[Mail] = Nil  

  def receive = {
    case a: Mail => {
      outbox = outbox :+ a
    }

    case MailToSend => {
      val maybeMailToSend = outbox.headOption
      outbox = outbox.tail
      senderActor ! maybeMailToSend
    }
  }
}

然后让发件人执行元成为每5秒轮询发件箱的计划执行元。它向发件箱执行元发送askMailToSend消息,如果响应是Some,则发送一个邮件。

它看起来像这样:

system.scheduler.scheduleOnce(5 seconds, senderActor, PollOutbox)
class Sender extends Actor {
  def receive = {
    case PollOutbox => {
      maybeMailToSend = outboxActor ? MailToSend
      ...
    }
  }
}
 类似资料:
  • 我需要创建一个具有以下接口的函数: 我的问题是,我不知道如何定义符合上述接口的流。 当我做这种事的时候 结果类型为Flow[Item,OtherItem,NotUsed]。到目前为止,我还没有在Akka文档中找到任何东西。还有akka上的功能。流动scaladsl。流只提供“未使用”而不是控制。如果有人能给我指出正确的方向那就太好了。 一些背景:我需要设置几个只在转换部分区分的管道。这些管道是主流

  • 问题内容: 我有一个不是actor的java对象,它使用actorSelection(Path)从一个actor系统中选择actor。系统中可能不存在所选参与者。 在Java Api中,ActorSelection不存在ask(),因此我无法向actor选择发送和标识消息并使用响应的发送者。 我试图通过演员选择将消息发送给演员,然后对死信做出反应来解决该问题。但是我没有任何死信。 如何通过Acto

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

  • Cadence工作流需要具有确定性,这意味着如果使用相同的输入参数执行工作流,工作流预计会产生完全相同的结果。 当我作为Cadence的新用户了解到上述需求时,我想知道当需要打破确定性的变化时,我如何才能长期维护工作流。 一个示例场景是,您有一个连续执行Activity1和Activity2的工作流,然后您需要更改这些活动的顺序,以便工作流在Activity1之前执行Activity2。还有许多其

  • 我对Spring框架是完全陌生的。我有一个任务是在Spring上制作电话簿应用程序。我需要登记和授权,还有我的电话簿。我有两个控制器,第一个是控制授权和注册的UserController 当我尝试进行身份验证或注册时。新用户我有这样的错误: NestedServletException:请求处理失败;嵌套异常是java.lang.IllegalStateException:映射到HTTP路径“HT

  • 源代码控制系统(又称版本控制系统)让你高效地管理工程。他们对一个人是很有用的,对一个团队是至关重要的。它们追踪不同版本里的所有改变,以至于所有代码都未曾丢失,其含义可以归属于改变。有了源代码控制系统,一个人可以自信地写一些而半途而废的代码和调试的代码,因为你修改的代码被仔细地与提交的、官方的即将与团队共享或发布的代码分割开。 我挺晚才开始意识到源代码控制系统的好处,但现在即使是一个人的工程,我也不