Akka 指南 之「邮箱」.docx

上传人:A*** 文档编号:142724146 上传时间:2020-08-22 格式:DOCX 页数:11 大小:17.79KB
返回 下载 相关 举报
Akka 指南 之「邮箱」.docx_第1页
第1页 / 共11页
Akka 指南 之「邮箱」.docx_第2页
第2页 / 共11页
Akka 指南 之「邮箱」.docx_第3页
第3页 / 共11页
Akka 指南 之「邮箱」.docx_第4页
第4页 / 共11页
Akka 指南 之「邮箱」.docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《Akka 指南 之「邮箱」.docx》由会员分享,可在线阅读,更多相关《Akka 指南 之「邮箱」.docx(11页珍藏版)》请在金锄头文库上搜索。

1、Akka 指南 之邮箱温馨提示:Akka 中文指南的 GitHub 地址为akka-guide,欢迎大家Star、Fork,纠错。文章目录邮箱依赖简介邮箱选择 指定 Actor 的消息队列类型 指定调度器的消息队列类型 如何选择邮箱类型 默认邮箱 将哪个配置传递到邮箱类型内置邮箱实现邮箱配置示例 PriorityMailbox ControlAwareMailbox创建自己的邮箱类型system.actorOf 的特殊语义邮箱依赖为了使用邮箱(Mailboxes),你需要将以下依赖添加到你的项目中: com.typesafe.akka akka-actor_2.12 2.5.21depende

2、ncies compile group: com.typesafe.akka, name: akka-actor_2.12, version: 2.5.21libraryDependencies += com.typesafe.akka % akka-actor % 2.5.21简介Akka 的邮箱中保存着发给 Actor 的信息。通常,每个 Actor 都有自己的邮箱,但也有例外,如使用BalancingPool,则所有路由器(routees)将共享一个邮箱实例。邮箱选择指定 Actor 的消息队列类型通过让某个 Actor 实现参数化接口RequiresMessageQueue,可以为某个

3、 Actor 类型指定某种类型的消息队列。下面是一个例子:import akka.dispatch.BoundedMessageQueueSemantics;import akka.dispatch.RequiresMessageQueue;public class MyBoundedActor extends MyActor implements RequiresMessageQueue RequiresMessageQueue接口的类型参数需要映射到配置中的邮箱,如下所示:bounded-mailbox mailbox-type = akka.dispatch.NonBlockingBou

4、ndedMailbox mailbox-capacity = 1000 akka.actor.mailbox.requirements akka.dispatch.BoundedMessageQueueSemantics = bounded-mailbox现在,每次创建MyBoundedActor类型的 Actor 时,它都会尝试获取一个有界邮箱。如果 Actor 在部署中配置了不同的邮箱,可以直接配置,也可以通过具有指定邮箱类型的调度器(dispatcher)配置,那么这将覆盖此映射。 注释:接口中的所需类型为 Actor 创建的邮箱中的队列类型,如果队列未实现所需类型,则 Actor 创建

5、将失败。指定调度器的消息队列类型调度器还可能需要运行在其上的 Actor 使用的邮箱类型。例如,BalancingDispatcher需要一个消息队列,该队列对于多个并发使用者是线程安全的。这需要对调度器进行配置,如下所示:my-dispatcher mailbox-requirement = org.example.MyInterface给定的需求命名一个类或接口,然后确保该类或接口是消息队列实现的父类型。如果发生冲突,例如,如果 Actor 需要不满足此要求的邮箱类型,则 Actor 创建将失败。如何选择邮箱类型创建 Actor 时,ActorRefProvider首先确定执行它的调度器。

6、然后确定邮箱如下:1. 如果 Actor 的部署配置节(section)包含mailbox键,那么它将命名一个描述要使用的邮箱类型的配置节。2. 如果 Actor 的Props包含邮箱选择(mailbox selection),即对其调用了withMailbox,则该属性将命名一个描述要使用的邮箱类型的配置节。请注意,这需要绝对配置路径,例如myapp.special-mailbox,并且不嵌套在akka命名空间中。3. 如果调度器的配置节包含mailbox-type键,则将使用相同的节来配置邮箱类型。4. 如果 Actor 需要如上所述的邮箱类型,则将使用该要求(requirement)的映

7、射来确定要使用的邮箱类型;如果失败,则尝试使用调度器的要求(如果有)。5. 如果调度器需要如上所述的邮箱类型,那么将使用该要求的映射来确定要使用的邮箱类型。6. 将使用默认邮箱akka.actor.default-mailbox。默认邮箱如果未按上述说明指定邮箱,则使用默认邮箱。默认情况下,它是一个无边界的邮箱,由java.util.concurrent.ConcurrentLinkedQueue支持。SingleConsumerOnlyUnboundedMailbox是一个效率更高的邮箱,它可以用作默认邮箱,但不能与BalancingDispatcher一起使用。将SingleConsume

8、rOnlyUnboundedMailbox配置为默认邮箱:akka.actor.default-mailbox mailbox-type = akka.dispatch.SingleConsumerOnlyUnboundedMailbox将哪个配置传递到邮箱类型每个邮箱类型都由一个扩展MailboxType并接受两个构造函数参数的类实现:ActorSystem.Settings对象和Config部分。后者是通过从 Actor 系统的配置中获取命名的配置节、用邮箱类型的配置路径覆盖其id键并添加回退(fall-back)到默认邮箱配置节来计算的。内置邮箱实现Akka 附带了许多邮箱实现: Unb

9、oundedMailbox(默认) 默认邮箱 由java.util.concurrent.ConcurrentLinkedQueue支持 是否阻塞:No 是否有界:No 配置名称:unbounded或akka.dispatch.UnboundedMailbox SingleConsumerOnlyUnboundedMailbox,此队列可能比默认队列快,也可能不比默认队列快,具体取决于你的用例,请确保正确地进行基准测试! 由多个生产商单个使用者队列支持,不能与BalancingDispatcher一起使用 是否阻塞:No 是否有界:No 配置名称:akka.dispatch.SingleCon

10、sumerOnlyUnboundedMailbox NonBlockingBoundedMailbox 由一个非常高效的”多生产者,单消费者“队列支持 是否阻塞:No(将溢出的消息丢弃为deadLetters) 是否有界:Yes 配置名称:akka.dispatch.NonBlockingBoundedMailbox UnboundedControlAwareMailbox 传递以更高优先级扩展akka.dispatch.ControlMessage的消息 由两个java.util.concurrent.ConcurrentLinkedQueue支持 是否阻塞:No 是否有界:No 配置名称:

11、akka.dispatch.UnboundedControlAwareMailbox UnboundedPriorityMailbox 由java.util.concurrent.PriorityBlockingQueue支持 等优先级邮件的传递顺序未定义,与UnboundedStablePriorityMailbox相反 是否阻塞:No 是否有界:No 配置名称:akka.dispatch.UnboundedPriorityMailbox UnboundedStablePriorityMailbox 由包装在akka.util.PriorityQueueStabilizer中的java.ut

12、il.concurrent.PriorityBlockingQueue提供支持 对于优先级相同的消息保留FIFO顺序,与UnboundedPriorityMailbox相反 是否阻塞:No 是否有界:No 配置名称:akka.dispatch.UnboundedStablePriorityMailbox其他有界邮箱实现,如果达到容量并配置了非零mailbox-push-timeout-time超时时间,则会阻止发件人。特别地,以下邮箱只能与零mailbox-push-timeout-time一起使用。 BoundedMailbox 由java.util.concurrent.LinkedBlo

13、ckingQueue支持 是否阻塞:如果与非零mailbox-push-timeout-time一起使用,则为Yes,否则为NO 是否有界:Yes 配置名称:bounded或akka.dispatch.BoundedMailbox BoundedPriorityMailbox 由包装在akka.util.BoundedBlockingQueue中的java.util.PriorityQueue提供支持 优先级相同的邮件的传递顺序未定义,与BoundedStablePriorityMailbox相反 是否阻塞:如果与非零mailbox-push-timeout-time一起使用,则为Yes,否则

14、为NO 是否有界:Yes 配置名称:akka.dispatch.BoundedPriorityMailbox BoundedStablePriorityMailbox 由包装在akka.util.PriorityQueueStabilizer和akka.util.BoundedBlockingQueue中的java.util.PriorityQueue提供支持 对于优先级相同的消息保留FIFO顺序,与BoundedPriorityMailbox相反 是否阻塞:如果与非零mailbox-push-timeout-time一起使用,则为Yes,否则为NO 是否有界:Yes 配置名称:akka.dispatch.BoundedStablePriorityMailbox BoundedControlAwareMailbox 传递以更高优先级扩展akka.dispatch.ControlMessage的消息 由两个java.util.concurrent.ConcurrentLinkedQueue支持,如果达到容量,则在排队时阻塞 是否阻塞:如果与非零mailbox-push-timeout-time一起使用,则为Yes,否则为NO 是否有界:Yes 配置名称:akka.dispatch.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号