Akka 进阶(二)Mailbox 邮箱

news/2024/4/29 20:24:33/文章来源:https://blog.csdn.net/weixin_44451022/article/details/128428409

目录

  • 一 默认邮箱配置
  • 二 内置邮箱
  • 三 自定义邮箱
  • 四 配置邮箱
  • 五 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表示有界,即邮箱有容量上的限制。
epub_933107_23 (1).jpg

三 自定义邮箱

自定义邮箱消息优先级

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());}}
}

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

四 配置邮箱

代码配置

  • 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接口,并且设置接口泛型为该邮箱队列的语义接口。
epub_933107_24.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_239743.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux-5 基础命令

Linux-5 基础命令 查看类命令 此类命令仅能查看文件中的内容 ls是用来查看目录中的内容cat是用来查看文件中的内容 查看文件 cat 选项 -n:显示文件内容的行数-A:显示文件中的特殊字符(如果从Windows拷贝配置文件到Linux,很容易出…

自然语言处理NLP——图神经网络与图注意力模型(GNN、GCN、GAT)

目录 系列文章目录 一、图神经网络 1.图与图嵌入 2.GNN动机 2.1 CNN的缺陷与非结构性数据 2.2 图嵌入的缺陷 3.GNN详解 3.1 GNN简介 3.2 GNN模型 3.3 GNN框架 3.4 GNN局限与优化 二、图卷积神经网络 1.卷积 2.GCN详解 2.1 GCN动机 2.2 GCN简介 2.3 GCN思想与模…

Qt之悬浮球菜单

一、概述 最近想做一个炫酷的悬浮式菜单,考虑到菜单展开和美观,所以考虑学习下Qt的动画系统和状态机内容,打开QtCreator的示例教程浏览了下,大致发现教程中2D Painting程序和Animated Tiles程序有所帮助,如下图所示&a…

论文投稿指南——中文核心期刊推荐(自然科学总论)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

Nginx学习笔记2【尚硅谷】

host文件修改时,可以更改用户组权限或者复制到某个有权限的位置修改完再复制替换之前的文件。 在server{}中,listenserver_name两个加一起是唯一的。 代理服务器就是一个网关。 配置Nginx反向代理: 注意:在写proxy_pass时&#xf…

化学试剂Biotin-PEG-COOH,Biotin-PEG-acid,生物素-聚乙二醇-羧基

英文名称:Biotin-PEG-COOH,Biotin-PEG-acid 中文名称:生物素-聚乙二醇-羧基 生物素-PEG-COOH是一种含有生物素和羧酸的线性杂双功能PEG试剂。它是一种有用的带有PEG间隔基的交联或生物结合试剂。生物素能以高特异性和亲和力与亲和素和链霉亲…

MySQL实现主从复制(Windows)的明细操作步骤

文章目录一、教学视频地址二、设计思路三、具体步骤一、教学视频地址 视频地址:视频链接 二、设计思路 准备两个5.7版本的MySQL,一个用作主数据库,另一个用作从数据库。 把主数据库做为写入数据库,从数据库作为读数据库。 三…

linux篇【12】:计算机网络<后序>

一.tcp接入线程池(使用线程池) 1.tcp初步接入线程池 我们设置了对应的任务是死循环,那么线程池提供服务,就显得有不太合适。我们给线程池抛入的任务都是短任务 因为他并没有访问任何类内成员,所以可以把执行方法提到…

seo综合查询,怎么看网站在移动端权重高低

移动权重就是指在手机、IPAD等的流量,数值越大流量越多。 未来百度流量一定会更倾向于移动端,移动端搜索将是百度搜索引擎的主要阵地。这一点和用户上网习惯有关系,因为移动网络无处不在。 那么怎么看网站在移动端权重高低?最…

了解学习node中著名的co模块原理,生成器+promise实现async+await

***内容预警*** 新手内容,菜鸟必看,大佬请绕道 首先 co 是一个npm第三方模块,我们需要npm install 之后才能使用它。 作为一个菜鸟我相信你肯定没有用过这个模块,但是据说这个模块很有名,那么我们就有必要来了解一下它…

为什么企业要注重数据安全?六大优势分析

数据加密是将数据从可读格式转换为编码格式。两种最常见的加密方法是对称加密和非对称加密。这些名称是指是否使用相同的密钥进行加密和解密: ●对称加密密钥:这也称为私钥加密。用于编码的密钥与用于解码的密钥相同,使其最适合个人用户和封…

使用Docker搭建Nacos的持久化和集群部署

1. 准备 1.1 mysql安装 下载镜像 docker pull mysql/mysql-server:5.7 在宿主机中相关目录,用于挂载容器的相关数据 mkdir -p /data/mysql/{conf,data} 编写my.cnf配置文件,在/data/mysql/conf目录中 (或下载 直接上传即可) my.cnf.txt - 蓝奏云 / …

BIT.4 Linux进程控制

目录进程创建fork函数初识写实拷贝fork常规用法fork调用失败的原因补充知识进程终止进程退出场景进程常见退出方法exit函数与_exit函数return 退出补充知识进程等待进程等待必要性进程等待的方法wait方法waitpid方法wait / waitpid 阻塞代码WIFEXITEDwait / waitpid 非阻塞代码…

客快物流大数据项目(九十八):ClickHouse的SQL函数

文章目录 ClickHouse的SQL函数 一、​​​​​​​​​​​​​​类型检测函数

Redis集群之AKF架构原理

当我们搭建集群之前,先要想明白需要解决哪些问题,搞清楚这个之前先回想一下单节点、单实例、单机有哪些问题? 单点故障:只有一台Redis的话,如果出现故障,那么整个服务都不可用缓存容量:单台Red…

【Django】第一课 基于Django超市订单管理系统开发

概念 django服务器开发框架是一款基于Python编程语言用于web服务器开发的框架,采用的是MTV架构模式进行分层架构。 项目搭建 打开pycharm开发软件,打开开发软件的内置dos窗口操作命令行 在这里指定项目存放的磁盘路径,并使用创建django项…

54三数之和55 56有无重复元素的全排列

54 三数之和 首先想到的就是之前的两数之和,只要在外层遍历一遍,对每个元素用之前的两数之和的哈希做法,就刚好是O(n^2) 但是有坑的地方在于需要去重,并且输出的三元组也是需要顺序的!!然后我用set去重和重…

史上最强,这份在各大平台获百万推荐的Java核心手册实至名归

又逢“金九银十”,年轻的毕业生们满怀希望与忐忑,去寻找、竞争一个工作机会。已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而,面试人群众多,技术市场却相对冷淡,…

flutter 环境搭建

一、简介 Flutter 是谷歌开发的一款开源、免费的,基于 Dart 语言的U1框架,可以快速在i0S和Android上构建高质量的原生应用。 它最大的特点就是跨平台和高性能。Dart是由谷歌,在2011 年开发的计算机编程语言,它可以被用于Web、服务器、移动应…

服务注册配置中心Nacos

文章目录一. 前言二. 下载安装1. 下载安装包2. Windows环境安装3. Linux环境安装1. 单击模式启动2. 集群模式启动3. 远程web控制4. 注册为系统服务三. 基本使用1. 添加依赖2. 服务注册3. 配置实例集群属性4. 实例权重负载均衡5. 环境隔离6. 临时实例与非临时实例四. Nacos配置管…