Tag: akka

在AKKA中,在主管上调用关闭会阻止它监督的所有演员吗?

假设我有一个链接了两个演员的主管。 当我的应用程序关闭时,我想优雅地关闭这些演员。 调用supervisor.shutdown()会停止所有演员还是我还需要手动停止我的演员? 格拉西亚斯

使用Java的Akka中的REST客户端

是否有任何无缝机制来执行来自Akka的restful请求(仅使用带有java的akka​​)。 有一个喷雾客户端http://spray.io/documentation/1.2.3/spray-client/但它接缝没有api for java或ssl支持。 还有Akka-Http包,但仍然是实验性的,我找不到客户端api的描述。 到目前为止,我有一种方法可以使用泽西客户端( https://jersey.java.net )并隐藏Akka路由器后面的同步调用,其中有一些演员来完成这项工作。 还有其他建议吗?

我可以从任意异步任务访问Http.Context.current()吗?

我正在为移动应用程序的后端工作,该应用程序目前正在Play 2.1.1上运行。 作为处理某些请求的一部分,我们发送推送通知。 发送推送通知的下游请求应完全异步,并与移动客户端的始发请求 – 响应分离。 我想在发送下游请求时访问Http.Context.current()以访问我们在请求标头中传递的一些跟踪信息。 最初,代码看起来像这样,遵循Play中的建议! 文件 : PushNotificationRunnable sendNotificationTask = new … Akka.system().scheduler().scheduleOnce(Duration.apply(0, TimeUnit.MICROSECONDS), sendNotificationTask, Akka.system().dispatcher()); 探索play.libs.Akka帮助器引导我进入future方法,该方法采用可调用方式并返回Promise。 这个承诺允许我链接更多的代码。 在这里,我已经链接了一个Callback ,它可以访问Http.Context.current(),这要归功于Play的PromiseActor类中的设置代码。 这允许我在任务完成时记录一行,包括跟踪ID,但在任务期间我的日志行仍然无法访问跟踪信息。 PushNotificationCallable sendNotificationTask = new … Akka.future(sendNotificationTask).onRedeem(new F.Callback() { @Override public void invoke(Void aVoid) throws Throwable { Logger.info(“Completed sendNotificationTask from the service”); } }); 以下是一些缩写的应用程序日志,用于显示我当前所处的位置以及缺少的内容,第5列中的跟踪ID: 2013-07-26 11:31:06,885 DEBUG play-akka.actor.default-dispatcher-10 -2454018518484259555 [application] : […]

用于从AKKA发送非阻塞http请求的Java示例

它是在AKKA文档中写的 …在一些外部实体(可能是锁,网络套接字等)上,参与者不应该阻塞(即在占用线程时被动等待)。阻塞操作应该在一些特殊的线程中完成,该线程将消息发送给应该对他们采取行动的演员。 来源http://doc.akka.io/docs/akka/2.0/general/actor-systems.html#Actor_Best_Practices 我现在找到了以下信息: 我读了从Akka / Scala发送出站HTTP请求并检查了https://github.com/dsciamma/fbgl1上的示例 我发现以下文章http://nurkiewicz.blogspot.de/2012/11/non-blocking-io-discovering-akka.html解释如何使用https://github.com/AsyncHttpClient/async-http-client non blocking http客户端与akka。 但是用Scala编写。 我如何编写一个制作非阻塞http请求的actor? 它必须将远程url页面作为文件,而不是将生成的文件对象发送给主actor。 然后主actor将此请求发送给解析器actor以解析文件…

如何使用Akka HTTP从多个actor / web处理程序正确调用单个服务器?

我有一个服务(让我们称之为服务A),它使用Akka Server HTTP来处理传入的请求。 我还有第三方应用程序(服务B),它提供了几个Web服务。 服务A的目的是转换客户端请求,调用服务B的一个或多个Web服务,合并/转换结果并将其提供给客户端。 我在某些部分使用Actors,而在其他部分使用Future。 要调用服务B,我使用Akka HTTP客户端。 Http.get(actorSystem).singleRequest(HttpRequest.create() .withUri(“http://127.0.0.1:8082/test”), materializer) .onComplete(…) 问题是,每个Service A请求都会创建一个新流,如果有多个并发连接,则会产生akka.stream.OverflowStrategy$Fail$BufferOverflowException: Exceeded configured max-open-requests value of [32] error 我已经问过这个问题,并建议使用单个Flow 如何正确调用Akka HTTP客户端以获取多个(10k-100k)请求? 虽然它适用于来自单个地方的一批请求,但我不知道如何使用来自所有并发请求处理程序的单个Flow。 这样做的正确“Akka-way”是什么?

自定义Spring Bean参数

我正在使用在activator上发布的Spring Akka示例来创建Spring托管bean演员。 这是我目前正在使用的代码,包括一个演示类: @Component class Test extends UntypedActor { @Autowired protected ObjectMapper objectMapper; protected final Account account; protected final Order order; public Test(Account account, Order order) { this.account = account; this.order = order; } @Override public void onReceive(Object message) throws Exception { if (message instanceof SomeCommand) { // Do something using the order and the […]

Akka适用于具有瞬态网络覆盖的系统吗?

Akka是否适合在预期节点进出wifi覆盖范围的系统中使用? 必须考虑哪些方面(例如哪些传输协议是首选)?

Akka:完成后必须清理动态创建的演员吗?

我使用Akka及其Java API UntypedActor实现了一个Actor系统。 在其中,一个actor(类型A)使用getContext().actorOf(…);动态地按需动态启动其他actor(类型B) getContext().actorOf(…); 。 那些B演员会做一些A不再关心的计算。 但我想知道:是否有必要在他们完成后清理那些B型演员? 如果是这样,怎么样? 通过让B actor调用getContext().stop(getSelf())完成后? 通过让B actor调用getSelf().tell(Actors.poisonPill()); 什么时候完成? [这就是我现在正在使用的]。 什么都不做? 通过…? 文档对此并不清楚,或者我忽略了它。 我有一些Scala的基本知识,但Akka的来源并不完全是入门级的东西……

执行io时akka jvm线程vs os线程

我已经搜索了一些网站,以帮助理解这一点,但没有发现任何超级明确的东西,所以我想我会发布我的用例,看看是否有人可以解决一些问题。 我有一个关于在akka中用于io操作时jvm线程vs os线程的扩展的问题。 来自akka网站: Akka支持事件驱动的轻量级线程的调度程序,允许在单个工作站上创建数百万个线程,以及基于线程的Actors,其中每个调度程序都绑定到专用的OS线程。 基于事件的Actors目前每个Actor消耗约600个字节,这意味着您可以在4 G RAM上创建超过650万个Actors。 在这种情况下,您是否可以帮助我了解在只有1个处理器的工作站上的重要性(为简单起见)。 因此,对于我的示例用例,我想要列出1000个“用户”,然后查询数据库(或多个)以获取有关每个用户的各种信息。 因此,如果我要将每个“获取”任务分配给一个actor,并且该actor将要执行IO,那么该actor是否会基于工作站的os线程限制阻塞? 在这样的场景中,akka演员模型如何让我解脱? 我知道我可能遗漏了一些东西,因为我对vm线程与os线程的交互作用并不是很了解,所以如果这里有一个聪明的人可以为我拼出来,那就太好了。 如果我使用Futures,我是否需要使用await()或get()来阻止并等待回复? 在我的使用案例中,无论演员如何,它最终只是’感觉’就像我正在制作1000个顺序数据库请求一样? 如果代码片段有助于我理解这一点,那么Java将是首选,因为我仍然需要加快scala语法的速度 – 但这是一个很好的明确文本解释,说明这些数百万个线程在执行数据库IO时如何在单个处理器机器上进行互操作也没关系。

Akka设计校长

在使用相当大的Akka应用程序时,我在使用普通方法和非Akka类时遇到了一个非常简单的结构,但在使用Akka时实际上很难确定,这就是为什么我来这里问你推荐什么是解决这个问题的最佳方法。 所以问题是这个,我有一个父actor,让我们称他为“Connector”,Connector有行为描述它在收到ConnectCommand实例时应该做什么。 首先,它使用HttpClient提交表单,然后转到几个URL以检查某些会话参数,并最终向Sender(称为“Consumer”)发送包含使用API​​所需的所有内容的连接消息。 现在,我是一个忠实的粉丝,而不是拉/问,所以实现这一点在我看来是一项艰巨的任务。 我们来看看吧。 HttpClientActor返回的所有响应都是一个Response实例,因此首先想到的是在我的actor中定义了多个行为,并且在连接过程的某个步骤完成后,逐步地将行为更改为下一步。 private final PartialFunction inital = ReceiveBuilder .match(ConnectCommand.class, c -> this.startConnection()) .matchAny(this::unhandled) .build(); private final PartialFunction stage1 = ReceiveBuilder .match(Response.class, this::stage1) .matchAny(this::unhandled) .build(); private final PartialFunction stage2 = ReceiveBuilder .match(Response.class, this::stage2) .matchAny(this::unhandled) .build(); private final PartialFunction stage3 = ReceiveBuilder .match(Response.class, this::stage3) .matchAny(this::unhandled) .build(); private final PartialFunction stage4 = ReceiveBuilder .match(Response.class, […]