首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Akka消息传递机制的实例

Akka消息传递机制的实例
EN

Stack Overflow用户
提问于 2015-06-04 01:50:20
回答 1查看 2.8K关注 0票数 11

我有相当多的Apache Camel (路由/中介/orchestation引擎;轻量级ESB)的经验,并且绞尽脑汁试图理解Akka之间的区别:

  • 调度员(DispatcherPinnedDispatcherCallingThreadDispatcher)
  • 路由器
  • 水池
  • 群组
  • 事件总线

根据医生的说法:

调度程序是:

...is是什么使阿克卡演员“滴答”,它是机器的发动机可以说。

但这并不能真正解释调度员是什么,以及调度员与演员之间的关系。

路由器是:

消息可以通过路由器发送,以便有效地将它们路由到目的地参与者,即它的路由者。路由器可以在参与者的内部或外部使用,您可以自己管理路由器,也可以使用具有配置功能的自包含路由器参与者。但听起来很像调度员。

是:

一种路由器的类型,它将路由器创建为子参与者,并在路由器终止时将其从路由器中移除。

是:

一种类型的参与者,其中路由者被创建到路由器外部,路由器使用参与者选择将消息发送到指定的路径,而不监视终止。

事件总线是:

向参与者组发送消息的...a方法

这听起来就像调度员和路由器。

因此,我主要关注的是:

  • 调度员、路由器和事件总线之间有什么区别,以及何时使用?
  • 何时使用池对组?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-04 04:33:38

调度程序基本上是一个线程池。Akka将dispatcher用于多个方面(例如在正确的邮箱中排队或从参与者邮箱中获取消息并对其进行处理)。每次需要执行这些操作之一时,都会从线程池中选择并使用线程池中的一个线程。默认情况下,Akka带有一个default-dispatcher,您可以在reference.conf搜索default-dispatcher中找到它的配置。您已经在使用default-dispatcher了,但是您可以定义一个不同的调度程序,以确保您有一个保留的线程池用于其他目的(例如,在使用akka-remote或akka-集群时,对于netty线程)。

Akka中的路由器是使用某种路由逻辑将消息路由到路由者列表的参与者。有许多类型的路由器取决于逻辑:广播,平衡,RoundRobin.你可以在阿克卡的文件里找到所有的人。路由器的路由器可以是一个池或一个组。最流行的路由器用例之一是垂直缩放应用程序,这意味着最大限度地利用系统中所有可用的CPU (同时使用多个线程)。

意味着为给定类型按需创建路由器。例如,您可能需要一个具有3个实例的RandomPool of MyFancyActor。Akka将创建MyFancyActor的三个角色,第四个角色将是实际的路由器。每次路由器参与者得到一条消息时,都会将消息转发给3个MyFancyActor参与者中的一个。池负责重新启动参与者并观察它们的生命周期,以确保有n个实例正在运行。

意味着在定义路由器之前正在创建路由器。一旦您定义您的路由器,您将需要传递您先前创建的路由器参与者列表。一个团队不会监视你的演员的生命周期,你需要自己去做。

事件总线是您可以通过参与者订阅特定类型消息的通道。如果有一条特定类型的消息,你的演员就会得到它。这用于一些Akka内部,比如当消息无法到达其目标或与集群的形成有关的事件时订阅DeadLetter(在akka-集群中)。您将使用它来了解在您的ActorSystem中发生的事件。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30633660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档