我正在运行Akka2.0.2微内核,希望为不受信任的远程参与者实现一个身份验证方案。
首先想到的是设置一个身份验证执行元,该执行元在身份验证成功时返回对工作执行元的引用。
也就是说,我要阻止远程参与者在没有身份验证的情况下访问我的微内核参与者系统中的参与者。
在actorOf()中不给工作执行元一个名字是不够的,因为它会得到一个容易猜测的自动生成的名字。有没有一种方法可以禁用Actor的远程查找,但仍然可以将ActorRef提供给远程系统?
我想你和身份验证演员的关系是对的。让身份验证执行元返回ActorRef和令牌。远程执行元必须在发送给本地工作者执行元的消息中包含该令牌。工作者执行元将在执行该工作之前验证令牌。
trait AuthenticatingActor { this => Actor
val authenticationService = //...
def receive = {
case UnauthenticatedRequest(token, msg) =>
if (authenticationService.validate(token)
authenticatedRecieve(msg)
else
sender ! RequestNotAuthenticated(token, "token invalid")
def authenticatedReceive: Receive
}
class Worker extends AuthenticatingActor with Actor {
def authenticatedReceive: Receive = //..
}
class AuthenticationActor extends Actor {
val authenticationService = //..
var worker: ActorRef = _
def receive = {
case Authenticate(username, password) =>
val token = authenticationService.authenticate(username, password)
sender ! token.map(AuthenticationSuccess(_, worker).
getOrElse(AuthenticationFailure)
//..
}
问题内容: 我有一个不是actor的java对象,它使用actorSelection(Path)从一个actor系统中选择actor。系统中可能不存在所选参与者。 在Java Api中,ActorSelection不存在ask(),因此我无法向actor选择发送和标识消息并使用响应的发送者。 我试图通过演员选择将消息发送给演员,然后对死信做出反应来解决该问题。但是我没有任何死信。 如何通过Acto
我很想知道调整大小,或者在本例中增加单个节点系统上的actor池中actor的数量是否真的会影响性能。 我有一个带超线程的四核系统。在任何给定的点上,系统可以运行8个线程。假设执行元执行的大多数操作都是CPU绑定的,那么将池中的执行元数量从20个增加到40个会有什么收获呢?
我正在将现有应用程序从Akka Classic移植到Akka Typed。最初,您可以使用上下文获取对参与者的引用。actorSelection()。resolveOne() 我知道在Akka Type中不再支持这一点,我们应该使用来注册演员以供发现。 但是,我只想将消息发送到本地参与者,即存在于集群中每个节点上的本地单例。我有它的本地路径,但没有对它的直接引用。这是因为它是由Akka管理系统创建
我们在使用Akka HTTP构建的web服务器上遇到了奇怪的内存行为。我们的架构是这样的: Web服务器路由调用各种参与者,为将来获取结果并将其流式传输到响应 参与者调用非阻塞操作(使用期货),组合和处理从中提取的数据,并将结果传送给发送者。我们使用标准的Akka Actor,实现它的receive方法(不是Akka键入的) 应用程序中的任何地方都没有阻止代码 当我在本地运行web服务器时,一开始
[04/27/2014 18:09:05.518][ReadScheduler-Akka.actor.Default-Dispatcher-3][Akka://ReadScheduler/User/Collector]从参与者[Akka://ReadScheduler/User/Executor#2127791644]到参与者[Akka://ReadScheduler/User/Collector