Akka 进阶(二)Mailbox 邮箱
目录
- 一 默认邮箱配置
- 二 内置邮箱
- 三 自定义邮箱
- 四 配置邮箱
- 五 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 邮箱相关推荐
- python内置函数面向对象_Pyhton——面向对象进阶二:类的内置函数补充、描述符...
Pyhton--面向对象进阶二: 一.类的内置函数补充 1.isinstance(obj,cls)--检查obj是否是该类的对象 class Hoo: def __init__(self,name,t ...
- python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解
#Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...
- Unity3d开发之十二:邮箱正则验证js和c#
邮箱正则验证 我们经常会使用到邮箱验证,这是 c# 的验证方式: /// <summary>/// 校验输入的内容是否为邮箱/// </summary>/// <para ...
- QIIME2进阶二_元数据及数据导入QIIME2
本节主要讲解如何将元数据与数据导入生物信息分析软件QIIME2,实现数据导入与检查. 本实战教程将使用来自人源化(humanized)小鼠的一组粪便样品,展示16S rRNA基因扩增子数据的" ...
- JavaScript进阶(二)
JavaScript进阶(二) 2019版黑马程序员javaScript进阶面向对象ES6 122集教程,哔哩哔哩链接:https://www.bilibili.com/video/BV1Kt411w ...
- 【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 ...
- Android进阶(二十八)上下文菜单ContextMenu使用案例
上下文菜单ContextMenu使用案例 前言 回顾之前的应用程序,发现之前创建的选项菜单无法显示了.按照正常逻辑来说,左图中在"商品信息"一栏中应该存在选项菜单,用户可进行分享等 ...
- vue高级进阶( 二 ) 8种组件通信详解
猛兽总是独行,牛羊才成群结队. -------鲁迅 vue组件通信的重要性无需多言...但是你肯定没有全部掌握,所以这第二篇文章应运而生 props和$emit props父传子,$emit子传父,看 ...
- mysql revoke 用法_mysql进阶(二十八)MySQL GRANT REVOKE用法
mysql进阶(二十八)MySQL GRANT REVOKE用法 MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执行查 ...
- Linux命令进阶二
Linux命令进阶二 系统信息查看 1.1 系统硬件.内核信息 uname -m 显示机器的处理器架构 uname -r 显示系统内核版本 cat /proc/version 显示内核的版本 host ...
最新文章
- 在SolidWorks 3D CAD中构建乐高直升机
- 交叉验证python_急!请教一个python里交叉验证的问题
- android中关于点击屏幕,实现破碎的效果的实现
- HandlerExceptionResolvers
- php header会重定向吗,php – 可以依靠header()重定向来结束程序流吗?
- amap不同样式marker点_想出一手漂亮的图,CAD打印样式表你必须会!
- Mysql在sql中截取时间类型字段的年月日和时间-DATE_FORMAT() 函数
- 3.1. 一元、多元逻辑回归、tensorflow2实现——python实战
- 老男孩Day3作业:工资管理系统
- Bishop-Pattern-Recognition-and-Machine-Learning-2006 pdf转html并翻译
- php数据库 datetime转化时间错,分析php日期转时间戳
- tracker服务器架构分析
- 图片加载失败,img触发错误显示默认图片
- Modifier源码总结
- python列表转化为数字信号的过程_如何用python写一个简单的数字信号处理计算器(文章末公开代码)?...
- 《山里的日子(记录片)》观后感——回不去的农村
- excel导出图片---HSSFWorkbook--SXSSFWorkbook
- 如何在Mac上获取App Store的ipa包(非越狱手机也可以)
- 打开 WORD 报错“无法创建工作文件, 请检查临时环境变量”
- 一篇文章告诉你什么是量化的统计套利