Routing Akka消息传递机制示例
我有相当多的Apache Camel(路由/中介/管弦引擎;轻量级ESB)经验,我绞尽脑汁试图理解Akka之间的区别:Routing Akka消息传递机制示例,routing,akka,dispatcher,event-bus,Routing,Akka,Dispatcher,Event Bus,我有相当多的Apache Camel(路由/中介/管弦引擎;轻量级ESB)经验,我绞尽脑汁试图理解Akka之间的区别: 调度员(Dispatcher,PinnedDispatcher,呼叫ReadDispatcher) 路由器 水池 团体 活动巴士 根据文件: 调度员是: …是什么使阿克卡演员“滴答滴答”,可以说是机器的引擎 但这并不能真正解释调度员是什么,或者它与参与者的关系是什么 路由器是: 消息可以通过路由器发送,以有效地将它们路由到目标参与者(称为其路由者)。路由器可以在参与者内部或
- 调度员(
,Dispatcher
,PinnedDispatcher
)呼叫ReadDispatcher
- 路由器
- 水池
- 团体
- 活动巴士
- 调度器、路由器和事件总线之间有什么区别,以及何时使用它们
- 何时使用池与组
默认调度程序
,其配置可以在搜索默认调度程序
中找到。您已经在使用默认调度程序
,但您可以定义不同的调度程序,以确保您有一个用于其他目的的保留线程池(例如,在使用akka remote或akka cluster时用于netty线程)
Akka中的路由器是一个参与者,它使用某种路由逻辑将消息路由到路由对象列表。根据逻辑,路由器有多种类型:广播、平衡、循环。。。你可以在akka文档中找到它们。路由器的路由对象可以是池或组。路由器最流行的用例之一是垂直扩展应用程序,这意味着最大限度地利用系统中所有可用的CPU(同时使用多个线程)
池意味着路由是按需为给定类型创建的。例如,您可能需要具有3个实例的MyFancyActor
的RandomPool
。Akka将创建三个MyFancyActor
参与者,第四个参与者将成为实际的路由器。每次路由器参与者收到消息时,都会将消息转发给3个MyFancyActor
参与者之一。池负责重新启动参与者并监视其生命周期,以确保有n个实例在运行
组表示在定义路由器之前创建路由对象。定义路由器后,需要传递先前创建的路由器列表。团队不会监控参与者的生命周期,您需要自己进行监控
事件总线是可以与参与者订阅特定类型消息的通道。如果有一个特定类型的消息,您将得到它。这用于一些Akka内部,如当消息无法到达目的地或与集群形成有关的事件(在Akka集群中)时订阅死信。您将使用它来了解
ActorSystem中发生的事件
非常棒的答案,谢谢@hveiga(+1)-下面几点非常快:(1)听起来像调度器
就像路由器,但在Akka内部用于消息传递和其他低级线程,因此,我不会直接给调度员发信息,是吗?(2) 听起来,事件总线实际上就像一个参与者系统范围的邮箱。但是,如果我订阅了从总线接收特定类型的消息,这会阻止其他参与者类型也接收相同的消息吗?再次感谢<代码>调度程序s对您来说是透明的。它们分派线程来执行操作。您不能向调度程序发送消息。值得一提的是,调度器
不是参与者,而路由器
是参与者。关于事件总线,您对类似于系统范围邮箱的定义可能是正确的。然而,我不知道里面的东西,但我真的怀疑阿克卡的人会做出一些阻碍。我想它不会阻塞。可能被实现为一个路由器
,其中每种消息类型的路由对象(订阅者)列表随时间而变化。为什么我们需要同一参与者的3个实例?我以为一直只有一个演员的例子?并且消息是由调度程序传递给参与者的?您可能需要同一参与者的多个实例。由于在给定的时间点,参与者只能处理一条消息,因此可能存在需要同时处理多条消息的场景。实现这一点的方法是拥有一个或多个参与者群体。