有时候发给演员的消息没有发件人,例如,如果发送消息是这样的:
actorRef.tell(Message(...), Actor.noSender)
一个用例是表明您对对此Message
的响应不感兴趣。
在Actor的receive
方法中,如何检查sender()
是与noSender
相对的actor?
我想出的最好的方法是基于actor路径进行以下测试,但是我不确定我是否可以在所有情况下以及将来的更改,Akka群集等情况下都可以依靠此测试。
if(sender.path.elements != "deadLetters" :: Nil) ...
如果没有发件人,我不希望发送到deadLetters
,因为在我的系统中,我将未送达的消息视为错误提示。
是否有更好和更可靠的方法来检查是否有发件人?
答案 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>