AKKA 邮箱Mailbox

发布时间:2025-09-16 点击:16
邮箱mailbox
akka mailbox持有发给actor的消息。通常,每一个actor都与自己的邮箱,但是当使用balancingpool时,所有的路由都共享一个邮箱实例。
邮箱选择
actor需要的消息队列类型
特定类型的actor可以用特定类型的消息队列,只要这个actor实现了参数化的接口requiresmessagequeue。这里是一个例子:
import akka.dispatch.boundedmessagequeuesemantics;import akka.dispatch.requiresmessagequeue;public class myboundeduntypedactor extends myuntypedactorimplements requiresmessagequeue<boundedmessagequeuesemantics> {}
requiresmessagequeue接口的类型参数需要在配置中映射到一个邮箱,就像这样:
bounded-mailbox {mailbox-type = “akka.dispatch.boundedmailbox”mailbox-capacity = 1000mailbox-push-timeout-time = 10s}akka.actor.mailbox.requirements {“akka.dispatch.boundedmessagequeuesemantics” = bounded-mailbox}
现在每次你创建一个类型为myboundeduntypedactor的actor,它都将会尝试获取一个有界邮箱。如果actor在部署时配置了不同的邮箱,可能是直接配置的,也可能是通过带有特定邮箱类型的分发器,那么就会覆写这个映射。
注意
为actor创建的邮箱中的队列类型用接口中要求的类型进行检查,如果队列没有实现要求的类型,那么actor创建就会失败。
dispatcher需要的消息队列类型
分发器也需要一个邮箱类型,用于运行中的actor。一个例子就是balancingdispatcher,它需要一个并发的、线程安全的消息队列。这样的需求可以在分发器配置中进行规划,就像这样:
my-dispatcher {mailbox-requirement = org.example.myinterface}
给定的需求命名了一个类或者接口,必须保证这个类或者接口是消息队列实现的超类型。万一冲突了,例如如果actor需要一个邮箱类型,但是它不满足这个需求,那么actor创建就会失败。
如何选择邮箱类型
当创建actor时,actorrefprovider首先确定分发器,分发起会执行actor。然后按照如下顺序确定邮箱类型:
如果actor的部署配置部分包含一个mailbox关键字,那么这个mailbox关键字就指定了要使用的邮箱类型;如果actor的props包含mailbox选择—即调用了withmailbox方法—那么这个方法指定要使用的邮箱类型;如果分发器的配置部分包含一个mailbox-type关键字,那么这部分也将被用于配置邮箱类型;如果actor需要上面描述的邮箱类型,那么这个需求的映射将被用于确定邮箱类型;如果失败了,那么分发器的需求-如果存在-将被会尝试;如果分发器需要后面描述的邮箱类型,那么这个需求的映射将被用于确定邮箱类型;将使用默认的邮箱akka.actor.default-mailbox。
默认邮箱
当按照上述描述的依然没有指定邮箱。那么就会使用默认的邮箱。默认邮箱his一个无界邮箱,是由java.util.concurrent.concurrentlinkedqueue支持的。
singleconsumeronlyunboundedmailbox是更高效的邮箱,它可被用于默认邮箱,但是它不能被用于balancingdispatcher。
将singleconsumeronlyunboundedmailbox配置为默认邮箱:
akka.actor.default-mailbox {mailbox-type = “akka.dispatch.singleconsumeronlyunboundedmailbox”}
那些配置会传给mailbox类型
每一个邮箱类型都继承自mailboxtype,它的构造函数有两个参数:actorsystem.settings对象和config对象。后面这个是通过actor系统的配置获取,用邮箱类型的配置路径覆盖它的id关键字,并添加一个默认邮箱配置的回调。
内置的mailbox实现
akka自带了很多邮箱实现:
unboundedmailbox(默认) 默认邮箱由java.util.concurrent.concurrentlinkedqueue支持阻塞: no有界: no配置名: “unbounded”或”akka.dispatch.unboundedmailbox” singleconsumeronlyunboundedmailbox
这个队列可能会或可能不会比默认邮箱更快,取决于你的使用场景—请确保进行过适当的基准测试!
由多生产者-单消费者队列支持,不能用于balancingdispatcher阻塞: no有界: no配置名:”akka.dispatch.singleconsumeronlyunboundedmailbox” nonblockingboundedmailbox 由非常高效的多生产者-单消费者队列支持阻塞: no (将溢出消息丢弃到死信)有界: yes配置名:”akka.dispatch.nonblockingboundedmailbox” unboundedcontrolawaremailbox 优先派送akka.dispatch.controlmessage消息由两个java.util.concurrent.concurrentlinkedqueue支持阻塞: no有界: no配置名:”akka.dispatch.unboundedcontrolawaremailbox” unboundedprioritymailbox 由java.util.concurrent.priorityblockingqueue支持相同优先级的消息的派送顺序未定义-与unboundedstableprioritymailbox相反阻塞: no有界: no配置名:”akka.dispatch.unboundedprioritymailbox” unboundedstableprioritymailbox 由包装到akka.util.priorityqueuestabilizer的java.util.concurrent.priorityblockingqueue支持相同优先级的消息保证按照fifo顺序派送- contrast with the unboundedprioritymailbox阻塞: no有界: no配置名:”akka.dispatch.unboundedstableprioritymailbox”
其它的有界邮箱实现如果达到最大容量,并且配置了non-zero mailbox-push-timeout-time,会阻塞发送者。
注意
下面的邮箱只应该用于mailbox-push-timeout-time为0的情况。
boundedmailbox 由java.util.concurrent.linkedblockingqueue支持阻塞:如果使用non-zero mailbox-push-timeout-time为yes,否则为no有界: yes配置名:”bounded”或”akka.dispatch.boundedmailbox” boundedprioritymailbox 由包装到akka.util.boundedblockingqueue中java.util.priorityqueue支持相同优先级的消息的派送顺序未定义-与boundedstableprioritymailbox相反阻塞:如果使用了non-zero mailbox-push-timeout-time则为yes,否则为no有界: yes配置名:”akka.dispatch.boundedprioritymailbox” boundedstableprioritymailbox 由包装在akka.util.priorityqueuestabilizer和akka.util.boundedblockingqueue中的java.util.priorityqueue支持相同优先级的消息的派送顺序为fifo-与boundedprioritymailbox相反阻塞: yes如果使用了non-zero mailbox-push-timeout-time则为yes,否则为no有界: yes配置名:”akka.dispatch.boundedstableprioritymailbox” boundedcontrolawaremailbox 优先派送akka.dispatch.controlmessage消息由两个java.util.concurrent.concurrentlinkedqueue支持,如果达到最大容量,则阻塞排队阻塞: yes如果使用了non-zero mailbox-push-timeout-time则为yes,否则为no有界: yes配置名:”akka.dispatch.boundedcontrolawaremailbox”
如果,你对上面的内容还有疑问,推荐选择西部数码企业云邮箱!有专人协助您解答邮箱疑问。
西部数码优质企业邮箱服务商,提供安全稳定,简单易用,高性价比的企业邮箱。按需自由定制,不限空间,极速收发,能够满足用户对企业邮箱的不同需求。多种反垃圾邮件算法,99.9%精准度,智能过滤,减少垃圾邮件干扰。支持小程序收发邮件,随时随地移动办公。而且价格实惠,还可以免费试用,7×24小时专业团队服务支持!
高性价比企业邮箱开通链接:https://www.west.cn/services/mail/


19阿里云服务器优惠
自己租一台云服务器
建立网站一定需要云服务器
阿里云服务器里如何安装网站
笔记本预装Office2016家庭学生版首次激活图文教程
云服务器如何
请问一下我在本地的数据库
个人建站流程