标签: actor

基于Agent/Actor的并发设计的设计模式

最近我开始使用支持演员/代理/无共享架构的替代语言 - 即.scala,clojure等(clojure也支持共享状态).

到目前为止,我所阅读的大部分文档都集中在介绍级别.我正在寻找的是四人帮中更高级的文档,而不是基于什么共享.

为什么?它有助于改变设计思维的变化.简单的例子很简单,但在现实世界的Java应用程序(单线程)中,您可以拥有1000个具有复杂关系的成员的对象图.但是,基于代理的并发开发,它在设计大型系统时引入了一整套全新的思路.即.代理粒度 - 一个代理应管理多少状态 - 对性能的影响等,或者是将共享状态对象图映射到基于代理的系统的良好模式.将域模型映射到设计的技巧.讨论不是关于技术,而是关于如何在设计中最好地使用该技术(现实世界"复杂"的例子会很棒).

erlang scala agent actor

21
推荐指数
3
解决办法
5752
查看次数

Akka的语言和产品替代方案是什么?

现在我正在看Play Framework并且喜欢它.在Play中提供的功能广告之一是Akka.

为了更好地了解Akka以及如何正确使用它,您能告诉我其他语言或产品有哪些替代品?

RabbitMQ与它相比如何?有很多重叠吗?将它们一起使用是否实用?在什么用例?

rabbitmq actor akka playframework

21
推荐指数
3
解决办法
2万
查看次数

如何在Scala中为具有构造函数参数的Actor创建TestActorRef?

阿卡测试文档提供以下方法来创建TestActorRef:

import akka.testkit.TestActorRef

val actorRef = TestActorRef[MyActor]

如何扩展它以测试带有构造函数参数的现有actor?当我尝试按原样运行时,在我的actor类中替换,我收到以下错误:

"错误而创建的演员akka.actor.ActorInitializationException:无法实例演员
确保演员不是类/特征中定义的,
如果是的话就把它的类/特性外,铁的陪伴对象,
或试图改变:"actorOf (道具[MyActor]'到'actorOf(道具(新的MyActor)'."

我可以想到在方括号内的类名后添加args的各种想法都会崩溃和烧毁.

testing scala actor akka

21
推荐指数
1
解决办法
5315
查看次数

我怎样才能检查Akka演员是否存在(akka 2.2)?

我有一个java对象,它不是一个使用actorSelection(Path)从actor系统中选择actor的actor.系统中可能存在所选的actor.

在Java Api中,ActorSelection不存在ask(),因此我无法向actor选择发送和识别消息并使用响应的发送者.

我试图通过演员选择向演员发送消息然后对deadletter做出反应来解决问题.但我没有任何动静.

如果演员是活着还是不存在,我如何检查ActorSelection?

ActorSystem system = ActorSystem.create("test");

//create test actor
system.actorOf(Props.create(TestActor.class), "testActor");

//add dead letter listener to the system
ActorRef eventBusActor = asys.actorOf(Props.create(EventBusActor.class), "eventbusactor");
system.eventStream().subscribe(eventBusActor, DeadLetter.class);


//This works. The test actor receives the message      
ActorSelection a1 = asys.actorSelection("/user/testActor");
a1.tell("hello", ActorRef.noSender());

//This does not work and does not send dead letters      
ActorSelection a2 = asys.actorSelection("/user/doesnotexist");
a2.tell("hello", ActorRef.noSender());

//Does not compile, because ask needs an ActorRef as first argument
ActorSelection a3 = asys.actorSelection("/user/test");
Future f = Patterns.ask(a3, new Identify(), 1000);
Run Code Online (Sandbox Code Playgroud)

java actor akka

21
推荐指数
3
解决办法
2万
查看次数

AKKA演员和数据库操作

我正在试图找出如何在使用actor系统时最好地处理数据库操作.事实上,当我们尝试不阻止AKKA时,数据库操作正在阻塞.

我在主文档中指出,处理这种情况的一种方法是在路由器后面创建一个actor池,可能在一个单独的executionContext上,它将处理数据库访问.

因此,我有以下问题:

1 - databaseActors是否始终保持连接打开状态?

2 - 它如何与许多数据库提供的连接池一起工作?

3 - 我们应该将两者结合起来,并让DatabaseActors在每次请求时从池请求一个新的连接.如果没有,是不是一直保持连接打开是一件坏事?

4 - 有人可以向我解释微妙的事情,使其成为一种避免线程饥饿的方法.例如,使用Play或spray,请求的处理是异步任务,但是如果该任务需要数据库访问并且我们向DatabaseActor发送请求,那么数据库Actor上的块(如果它发生)不会导致,异步任务中的一个块,导致可能的线程不足?

5 - 100%确定DB ACID属性确保多次读写的安全性,因此在关系之前发生.

6 - 我正在使用也称为三重存储的语义数据库,并在我的请求中大量使用语义推理功能.我还执行了很多写访问,任何建议,关于池和actor编号或专用执行上下文的调整参数?

最好,

中号

database-connection scala connection-pooling actor akka

21
推荐指数
1
解决办法
7733
查看次数

TPL Dataflow,如何将项目转发到许多链接目标块中的一个特定目标块?

我正在寻找一个TPL数据流块解决方案,它可以容纳多个项目,可以链接到多个目标块,但是它能够将项目转发到仅通过过滤器/谓词的特定目标块.在任何时候都不应该将项目同时传递到多个目标块,始终只能传递给与过滤器匹配的项目,或者可以丢弃该项目.我不喜欢BroadCastBlock,因为如果我理解正确,它不能保证传送(或者是吗?)并且过滤是在目标块侧完成的,这意味着BroadCastBlock基本上将每个项目的副本发送到所有linkedTo目标块.如果我理解正确,它也不会在任何时候持有多个项目.我不想使用Post/Async但维护LinkTo链.

有没有办法绕过完整的自定义数据流块?或者我误解了BroadCastBlock的工作原理?不幸的是,实际上没有太多文档可以详细介绍并涵盖用例.任何想法都受到高度赞赏.

c# message-passing task-parallel-library actor tpl-dataflow

20
推荐指数
2
解决办法
5403
查看次数

我如何最好地分享Akka演员之间的行为?

我有两个Akka演员以同样的方式回复一些消息,但其他人以不同的方式.它们都响应同一组消息.想知道如何使用他们的接收方法设计我的两个演员,通过继承,镇定等?我尝试将其他特征的部分函数与"orElse"链接在一起,遗憾的是,它将类暴露给它的特征功能,而且我不确定特征的接收如何能够轻松访问actor的上下文.一个直接的,模块化的解决方案将是理想的,但我想知道这是否是一个解决的问题?

scala traits actor akka

20
推荐指数
2
解决办法
4960
查看次数

Azure服务结构actor依赖注入

有没有办法将依赖项注入Azure Service Fabric Actor的构造函数?

c# dependency-injection actor azure-service-fabric

20
推荐指数
3
解决办法
8100
查看次数

scala actors vs线程和阻止IO

据我所知,actor基本上是在线程上实现的轻量级线程,在一小部分共享线程上运行许多actor.

鉴于这种情况,在actor中使用阻塞操作会阻塞底层线程.这不是一个正确性问题,因为actor库会根据需要产生更多线程(是吗?)但是最后你会遇到很多线程,从而否定了首先使用actor的好处.

鉴于此,当您需要执行此类IO操作时,演员如何工作?是否存在"actor-block"的操作,在让线程继续执行其他操作时暂停actor(就像阻塞操作在让CPU继续执行其他操作时暂停线程一样),或者是所有用CPS编写的链接,链接演员?或者演员根本不适合这种长期运行?

背景:我有经验编写多线程东西的经验,并且了解CPS /事件循环如何工作,但绝对没有与演员合作的经验,只想在高水平上了解他们如何适应,在我潜水之前进入代码.

concurrency multithreading scala actor

19
推荐指数
1
解决办法
2366
查看次数

Akka演员询问和类型安全

我如何使用Akka Actor询问并保持类型安全?或者避免使用ask来支持tell?

当调用?ask在Akka Actor上时,Future[Any]返回a并且我必须通过显式转换future.mapTo[MyType].

我不喜欢失去这种类型的安全.如果我直接使用Futures(没有演员)我可以明确地返回Future[MyType]并保持类型安全.

我的具体用例涉及一个演员将其消息委托给两个子演员,然后汇总这些演员的结果并将其返回给父母的发件人.我父母的接收方法与Akka Docs中的这种方法类似:

http://doc.akka.io/docs/akka/2.0/scala/futures.html#For_Comprehensions

val f1 = actor1 ? msg
val f2 = actor2 ? msg

val f3 = for {
  a ? f1.mapTo[Int]
  b ? f2.mapTo[Int]
  c ? ask(actor3, (a + b)).mapTo[Int]
} yield c
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现我的用例?

asynchronous scala future actor akka

17
推荐指数
2
解决办法
3129
查看次数