如何检查邮件是否在Akka Actor中具有发件人

时间:2019-07-28 08:43:35

标签: scala akka akka-actor

有时候发给演员的消息没有发件人,例如,如果发送消息是这样的:

actorRef.tell(Message(...), Actor.noSender)

一个用例是表明您对对此Message的响应不感兴趣。

在Actor的receive方法中,如何检查sender()是与noSender相对的actor?

我想出的最好的方法是基于actor路径进行以下测试,但是我不确定我是否可以在所有情况下以及将来的更改,Akka群集等情况下都可以依靠此测试。

if(sender.path.elements != "deadLetters" :: Nil) ...

如果没有发件人,我不希望发送到deadLetters,因为在我的系统中,我将未送达的消息视为错误提示。

是否有更好和更可靠的方法来检查是否有发件人?

3 个答案:

答案 0 :(得分:2)

通常,更好的方式是在您的消息中添加replyTo: Option[ActorRef],这样更明确。

答案 1 :(得分:0)

我找到了解决方法:

val hasSender = sender != context.system.deadLetters

答案 2 :(得分:0)

我正在Java领域工作,并且需要类似的东西来记录发送者。我还在一个无法访问Akka上下文的util类中工作,我只传递了ActorRef。与:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" type="text/css" href="style.css">
  <title>Todo List</title>
</head>
<body>

  <div class="container">
    <h1>Todo</h1>

    <form class="todo-form">
      <input type="text" class="todo-input" placeholder="Add a Todo...">
      <button type="submit" class="add-button">Add</button>
    </form>

    <ul class="todo-items">
      
<!-- dummy item -->

      <li class="item" data-key="1594003133171">
        <input class="checkbox" type="checkbox">
        Go to Gym
        <button class="delete-button">X</button>
      </li>
    </ul>
  </div>
  
  <script type="text/javascript" src="script.js"></script>
</body>
</html>