目录

  • 一 默认邮箱配置
  • 二 内置邮箱
  • 三 自定义邮箱
  • 四 配置邮箱
  • 五 RequiresMessageQueue接口

Actor中的邮箱是一个队列结构,所有发送过来的消息都会在该队列进行排队,在默认情况下,它遵循先进先出(FIFO)的模式,假如需要改变这种默认处理方式,需要自定义邮箱或消息队列。

一 默认邮箱配置

Akka对邮箱提供了专门的配置项,即默认邮箱配置(default-mailbox),比如邮箱类型(mailbox-type)、邮箱容量(mailbox-capacity)、入队超时时间(mailbox-push-timeout-time)等

        akka.actor.default-mailbox {mailbox-type = "akka.dispatch.UnboundedMailbox"mailbox-capacity = 1000mailbox-push-timeout-time = 10s}
  • mailbox-type:邮箱类型,分为有界(Bounded)和无界(Unbounded), Akka默认采用UnboundedMailbox,表示不限制邮箱队列的大小。
  • mailbox-capacity:邮箱容量,定义了有界邮箱(BoundedMail)的大小,该值只能是正数。
  • mailbox-push-timeout-time:入队超时时间,主要是指push一个消息到有界邮箱的队列的超时时限。假如为负数,则表示无限超时,这可能会带来死锁问题。

二 内置邮箱

在Akka中,邮箱主要分为两大类:Unbounded和Bounded。Unbounded表示无界,即邮箱没有容量上的限制;Bounded表示有界,即邮箱有容量上的限制。

三 自定义邮箱

自定义邮箱消息优先级

import akka.actor.ActorSystem;
import akka.dispatch.PriorityGenerator;
import akka.dispatch.UnboundedStablePriorityMailbox;
import com.typesafe.config.Config;/*** @description: 自定义优先级* @author: shu* @createDate: 2022/12/23 19:23* @version: 1.0*/
class MsgPriorityMailBox extends UnboundedStablePriorityMailbox {/*** 返回值越小,优先级越高* @param settings* @param config*/public MsgPriorityMailBox(ActorSystem.Settings settings, Config config) {super(new PriorityGenerator() {@Overridepublic int gen(Object message) {if (message.equals("张三")) {return 0;}else if(message.equals("李四")) {return 1;}else if(message.equals("王五")) {return 2;}else {return 3;}}});}}

配置

 msgprio-mailbox {mailbox-type = "MsgPriorityMailBox"
}

测试

import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.actor.UntypedActor;/*** @description:* @author: shu* @createDate: 2022/12/23 14:08* @version: 1.0*/
class MsgPriorityActor extends UntypedActor {@Overridepublic void onReceive(Object msg) throws Exception {System.out.println(getSelf()+"--->"+msg+""+Thread.currentThread().getName());}public static void main(String[] args) {ActorSystem sys=ActorSystem.create("system");ActorRef ref= sys. actorOf(Props.create(MsgPriorityActor.class).withMailbox("msgprio-mailbox"), "priorityActor");Object[] messages= {"王五", "李四", "张三", "小二"};for(Object msg:messages) {ref.tell(msg, ActorRef.noSender());}}
}


我们可以看到我们控制了消息的优先级

四 配置邮箱

代码配置

  • withMailbox来关联mailbox
 ActorRef ref= sys. actorOf(Props.create(MsgPriorityActor.class).withMailbox("msgprio-mailbox"), "priorityActor");

配置文件

        akka.actor.deployment {/priorityActor {mailbox = msgprio-mailbox}}

配置dispatcher邮箱

        my-msgprio-dispatcher {type = Dispatchermailbox-type = "MsgPriorityMailBox"#其他dispatcher配置在此省略}sys.actorOf(Props.create(MsgPriorityActor.class).withDispatcher("my-msgprio-dispatcher"), "priorityActor")

五 RequiresMessageQueue接口

为了让Actor自动拥有某个特定类型的邮箱,可以让该Actor实现RequiresMessage-Queue接口,并且设置接口泛型为该邮箱队列的语义接口。

Akka 进阶(二)Mailbox 邮箱相关推荐

  1. python内置函数面向对象_Pyhton——面向对象进阶二:类的内置函数补充、描述符...

    Pyhton--面向对象进阶二: 一.类的内置函数补充 1.isinstance(obj,cls)--检查obj是否是该类的对象 class Hoo: def __init__(self,name,t ...

  2. python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解

    #Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...

  3. Unity3d开发之十二:邮箱正则验证js和c#

    邮箱正则验证 我们经常会使用到邮箱验证,这是 c# 的验证方式: /// <summary>/// 校验输入的内容是否为邮箱/// </summary>/// <para ...

  4. QIIME2进阶二_元数据及数据导入QIIME2

    本节主要讲解如何将元数据与数据导入生物信息分析软件QIIME2,实现数据导入与检查. 本实战教程将使用来自人源化(humanized)小鼠的一组粪便样品,展示16S rRNA基因扩增子数据的" ...

  5. JavaScript进阶(二)

    JavaScript进阶(二) 2019版黑马程序员javaScript进阶面向对象ES6 122集教程,哔哩哔哩链接:https://www.bilibili.com/video/BV1Kt411w ...

  6. 【MCAL_CANDriver】-1.2-Can Mailbox邮箱,Hardware Object,HOH,HRH,HTH之间的关系

    点击返回「<Autosar_MCAL高阶配置>总目录」 目录 1 关键字定义 2 Maibox与Hardware Object之间的关系 2.1 接收L-PDU 2.2 发送L-PDU 3 ...

  7. Android进阶(二十八)上下文菜单ContextMenu使用案例

    上下文菜单ContextMenu使用案例 前言 回顾之前的应用程序,发现之前创建的选项菜单无法显示了.按照正常逻辑来说,左图中在"商品信息"一栏中应该存在选项菜单,用户可进行分享等 ...

  8. vue高级进阶( 二 ) 8种组件通信详解

    猛兽总是独行,牛羊才成群结队. -------鲁迅 vue组件通信的重要性无需多言...但是你肯定没有全部掌握,所以这第二篇文章应运而生 props和$emit props父传子,$emit子传父,看 ...

  9. mysql revoke 用法_mysql进阶(二十八)MySQL GRANT REVOKE用法

    mysql进阶(二十八)MySQL GRANT REVOKE用法 MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执行查 ...

  10. Linux命令进阶二

    Linux命令进阶二 系统信息查看 1.1 系统硬件.内核信息 uname -m 显示机器的处理器架构 uname -r 显示系统内核版本 cat /proc/version 显示内核的版本 host ...

最新文章

  1. 在SolidWorks 3D CAD中构建乐高直升机
  2. 交叉验证python_急!请教一个python里交叉验证的问题
  3. android中关于点击屏幕,实现破碎的效果的实现
  4. HandlerExceptionResolvers
  5. php header会重定向吗,php – 可以依靠header()重定向来结束程序流吗?
  6. amap不同样式marker点_想出一手漂亮的图,CAD打印样式表你必须会!
  7. Mysql在sql中截取时间类型字段的年月日和时间-DATE_FORMAT() 函数
  8. 3.1. 一元、多元逻辑回归、tensorflow2实现——python实战
  9. 老男孩Day3作业:工资管理系统
  10. Bishop-Pattern-Recognition-and-Machine-Learning-2006 pdf转html并翻译
  11. php数据库 datetime转化时间错,分析php日期转时间戳
  12. tracker服务器架构分析
  13. 图片加载失败,img触发错误显示默认图片
  14. Modifier源码总结
  15. python列表转化为数字信号的过程_如何用python写一个简单的数字信号处理计算器(文章末公开代码)?...
  16. 《山里的日子(记录片)》观后感——回不去的农村
  17. excel导出图片---HSSFWorkbook--SXSSFWorkbook
  18. 如何在Mac上获取App Store的ipa包(非越狱手机也可以)
  19. 打开 WORD 报错“无法创建工作文件, 请检查临时环境变量”
  20. 一篇文章告诉你什么是量化的统计套利

热门文章

  1. 计算机上的蜘蛛纸牌游戏打不开,win10系统系统笔记本打不开蜘蛛纸牌游戏的具体方法...
  2. 【性能优化】PHP - 优化手段 - 学习/实践
  3. 通过搜狗抓取微信公众号--------破解url
  4. dB、dbm、dbw、W 相互关系
  5. SE (Squeeze Excitation)模块
  6. jQuery文件导入
  7. 北京PM2.5情况分析(2010-2014)
  8. 极客爱情 2.2 | 程序员是这样撩妹的
  9. [翻译]C#和COM的互操作
  10. 51NOD L4-第三章 树 刷题记录-zyz