我们如何将actor处理过的消息的结果发回给实际的发件人

投降王

我创建了一个简单的Actor,它从发送方接收消息并处理该消息,并将处理后的结果发送回发送方。

我试图通过Actor模型和发件人实现上述要求

演员代码:

import akka.actor.Actor
import akka.actor.Props

class HelloWorld extends Actor {

  var result:Int =0
  def receive = {

    case dataStr:String =>result =process(dataStr)
    sender ! result

  }

  def process(str:String):Int ={

  str.length +30
 }
 }

ActorApp代码:

import akka.actor.{ActorRef, ActorSystem, Props}

object ActorApp {

  def main(args :Array[String]) ={

    val system = ActorSystem("SimpleActorSystem")
    val actorObj1:ActorRef = system.actorOf(Props[HelloWorld],"helloworld1")
    val res =actorObj1 ! "Hi"
    println(res)

   }

 }

我得到以下输出:

 ()
 [INFO] [10/08/2016 23:21:50.438] [SimpleActorSystem-akka.actor.default-dispatcher-3] [akka://SimpleActorSystem/deadLetters] Message [java.lang.Integer] from Actor[akka://SimpleActorSystem/user/helloworld1#-233096668] to Actor[akka://SimpleActorSystem/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.

我期望在主要对象(ActorApp)中输出如下:

 32

如何将处理后的输出发回给发件人?另外,此INFO日志说明了什么?

扩展

考虑一下您在做什么:您正在向HelloWorld演员发送一条消息,在其中进行接收和处理,然后从该演员向发送原始消息的演员发送一条消息(请记住:sender返回ActorRef)。

但是:那是什么演员?只有一个HelloWorld演员。因此自然sender没有被定义(因为您实际上没有从其他参与者发送消息)。如果您将消息发送给无法传递的接收者,则它们将发送到akkas死信系统参与者(Actor[akka://SimpleActorSystem/deadLetters])-这就是日志消息所说的内容。

那么,您实际上如何返回结果呢?您使用ask-pattern

导入akka.pattern.ask并使用问号(而不是感叹号)来执行此操作。现在,您将获得一个可以(希望)以您的结果解决的未来:

import akka.pattern.ask
import scala.concurrent.duration._

val system = ActorSystem("SimpleActorSystem")
val actorObj1:ActorRef = system.actorOf(Props[HelloWorld],"helloworld1")
val resFuture = (actorObj1 ? "Hi").mapTo[Int]
val res = Await.result(resFuture, 5 seconds)
println(res)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bleno:如何将消息发送回发件人?

来自分类常见问题

Actor消息处理程序中捕获了哪个发件人?

来自分类Dev

Actor消息处理程序中捕获了哪个发件人?

来自分类Dev

我们如何在Rails Mailer中设置电子邮件发件人的名称?

来自分类Dev

如何将特定按钮识别为发件人

来自分类Dev

如何使用消息传递架构将消息发送回发件人?

来自分类Dev

如何跟踪电子邮件发件人的实际IP?

来自分类Dev

在将消息添加到jms队列之前,如何从ESB向发件人发送响应

来自分类Dev

在将消息添加到jms队列之前,如何从ESB向发件人发送响应

来自分类Dev

发件人离线时如何发送XMPP消息?

来自分类Dev

发件人如何解密自己的加密消息

来自分类Dev

如何处理STARTTLS失败的邮件发件人?

来自分类Dev

发生故障时,由主管发回发件人

来自分类Dev

acumatica批准通知发回原始发件人

来自分类Dev

如何使用Chromecast将消息从自定义收件人发送到发件人应用?

来自分类Dev

Whats App批量消息发件人

来自分类Dev

我们如何将变形消息(几种消息类型之一)放入protobuf消息中?

来自分类Dev

我们如何将变形消息(几种消息类型之一)放入protobuf消息中?

来自分类Dev

我们如何将groupby的结果更改为数据帧?

来自分类Dev

如何将具有“读取”特征的类似字符串的内容传递给“发件人”的实现?

来自分类Dev

Rails-Mail_form如何将“发件人”字段自动设置为current_user电子邮件

来自分类Dev

我们如何阅读某些用户发送给我们的机器人的消息?

来自分类Dev

我们如何获得Outlook收件人的实际电子邮件地址?

来自分类Dev

我们如何获得Outlook收件人的实际电子邮件地址?

来自分类Dev

如何识别发件人控件?

来自分类Dev

如何读取短信发件人的名字?

来自分类Dev

如何知道KVO中的发件人?

来自分类Dev

Discord Bot 如何获取发件人

来自分类Dev

我们如何将UIButton存储到NSDictionary?

Related 相关文章

  1. 1

    Bleno:如何将消息发送回发件人?

  2. 2

    Actor消息处理程序中捕获了哪个发件人?

  3. 3

    Actor消息处理程序中捕获了哪个发件人?

  4. 4

    我们如何在Rails Mailer中设置电子邮件发件人的名称?

  5. 5

    如何将特定按钮识别为发件人

  6. 6

    如何使用消息传递架构将消息发送回发件人?

  7. 7

    如何跟踪电子邮件发件人的实际IP?

  8. 8

    在将消息添加到jms队列之前,如何从ESB向发件人发送响应

  9. 9

    在将消息添加到jms队列之前,如何从ESB向发件人发送响应

  10. 10

    发件人离线时如何发送XMPP消息?

  11. 11

    发件人如何解密自己的加密消息

  12. 12

    如何处理STARTTLS失败的邮件发件人?

  13. 13

    发生故障时,由主管发回发件人

  14. 14

    acumatica批准通知发回原始发件人

  15. 15

    如何使用Chromecast将消息从自定义收件人发送到发件人应用?

  16. 16

    Whats App批量消息发件人

  17. 17

    我们如何将变形消息(几种消息类型之一)放入protobuf消息中?

  18. 18

    我们如何将变形消息(几种消息类型之一)放入protobuf消息中?

  19. 19

    我们如何将groupby的结果更改为数据帧?

  20. 20

    如何将具有“读取”特征的类似字符串的内容传递给“发件人”的实现?

  21. 21

    Rails-Mail_form如何将“发件人”字段自动设置为current_user电子邮件

  22. 22

    我们如何阅读某些用户发送给我们的机器人的消息?

  23. 23

    我们如何获得Outlook收件人的实际电子邮件地址?

  24. 24

    我们如何获得Outlook收件人的实际电子邮件地址?

  25. 25

    如何识别发件人控件?

  26. 26

    如何读取短信发件人的名字?

  27. 27

    如何知道KVO中的发件人?

  28. 28

    Discord Bot 如何获取发件人

  29. 29

    我们如何将UIButton存储到NSDictionary?

热门标签

归档