Akka 进阶(二)Mailbox 邮箱

news2024/11/20 14:24:14

目录

  • 一 默认邮箱配置
  • 二 内置邮箱
  • 三 自定义邮箱
  • 四 配置邮箱
  • 五 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 = 1000
                mailbox-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() {
            @Override
            public 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 {
    @Override
    public 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 = Dispatcher
        mailbox-type = "MsgPriorityMailBox"
            #其他dispatcher配置在此省略
        }

        sys.actorOf(Props.create(MsgPriorityActor.class).withDispatcher("my-msgprio-dispa
            tcher"), "priorityActor")

五 RequiresMessageQueue接口

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何将ppt图片压缩?统一压缩ppt图片的简单方法

日常生活中经常需要用到ppt,一份PPT少则十几页多则上百页,就很容易造成PPT过大不易传送的情况,其实我们可以先把ppt图片压缩(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图)之后再制作成ppt文件,那么…

【推荐收藏】这份图解算法数据结构的材料太良心

5年前发生的一件事,成为了我职业生涯的重要转折点。当时的我在交大读研,对互联网求职一无所知,但仍然硬着头皮申请了 Microsoft 实习生。面试官让我在白板上写出“快速排序”代码,我畏畏缩缩地写了一个“冒泡排序”,并…

Unity 3D Inspector 视图 || Unity 3D Scene View 视图 || Unity 3D Game View 视图

Unity 3D Inspector 视图 Unity 3D 的 Inspector 视图用于显示当前选定的游戏对象的所有附加组件(脚本属于组件)及其属性的相关详细信息。 视图布局 以摄像机为例,在 Unity 3D 的 Inspector 视图中显示了当前游戏场景中的 MainCamera 对象所…

腾讯云轻量应用服务器使用 Cloudreve 应用镜像搭建个人私有云盘!

Cloudreve 是一款开源的网盘软件,支持服务器本机及腾讯云对象存储 COS 等多种存储方式,提供离线下载、拖拽上传、在线预览等功能,能够帮助您快速搭建个人使用或多人共享的云盘系统。该镜像基于 CentOS 8.2 64位操作系统,已集成宝塔…

OpenAI | GPT-3新模型Davinci,将AI写作提升到新水平!网友惊呼:GPT-4要来了?

文 | 王思若20年,OpenAI推出了1750亿参数量的屠榜‘杀器’GPT-3,但基于大模型至今悬而未决的伦理和社会风险以及商业盈利等因素的考量,OpenAI将GPT-3以付费API的形式向公众开放。通过调用GPT-3的API,问答、语义检索、翻译、数学推…

消息队列RabbitMQ学习笔记(四)死信队列和延迟队列

1. 死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理 解,一般来说,producer 将消息投递到 broker 或者直接到queue 里了,consumer 从 queue 取出消息 进行…

【Linux】调试器gdb的使用

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉什么是gdb…

2022-忙碌的一年

(点击即可听音频)前言花有重开日,人无再少年.每当这个时候,回头驻足,不是感慨万千,就是惜时如金,一年悄无声息的从指尖划过,星海横流,岁月如碑.那些被偷走的时光,发生了大大小小的事无论是平淡无奇,还是历久难忘,有惊喜,有遗憾,终将都会隐入尘烟。大到国…

自定义coco数据集

1、环境 anaconda环境安装配置 2、工具 安装labelme工具 3、安装软件 3.1、打开anaconda控制台 3.2、创建虚拟环境 conda create -n labelme python3.73.3、激活环境 conda activate labelme3.4、下载labelme pip install labelme3.5、输入labelme打开软件 以后打开跳…

微信小程序--P2P消息收发模式(MQTT)

目录 前言 js demo 参数 new Paho.Client 创建对象 onConnectionLost 连接丢失回调 onMessageArrived 监听数据 connect (connectOptions)将此消息客户端连接到其服务器。 mqtt 频繁断开和重连问题 小程序实践 前言 P2P,顾名思义,是一对一的消…

vTESTstudio入门到精通 - vTESTstudio工具栏介绍_Layout

到今天这一篇vTESTstudio工具栏介绍就将暂时告一段落了,后续如果大家有需求的话可以私信我,我就继续再往深的介绍,如果没有催更的话,就当这部分是给大家做个普及,作为一个扫盲篇吧,实际项目使用和编程的内容…

Nginx反向代理的一个算法API的接口调用超时:504,GateWay Timeout,怎么破?

背景 服务端由第三方部署了一个基于 darknet (一个较为轻型的完全基于C与CUDA的开源深度学习框架)的识别算法服务,通过 Flask 的 Web 服务对业务服务暴露 API 接口。作为测试,一开始是直接通过 python3 app.py 的命令行启动的服务…

SAP Product Lifecycle Costing 里的 Costing Sheet 成本核算表

有朋友在我的知识星球里向我提问: 请您帮忙讲一下这个AP0100的costing sheet rows这里都表示什么意思吗?比如row10、base Z010、overhead啥、描述、from、to row、credit都说明了什么,能够实现上面👆🏻的目标吗&#x…

【详细学习SpringBoot源码之属性配置文件加载原理(Bootstrap.properties|Bootstrap.yml)-8】

一.知识回顾 【0.SpringBoot专栏的相关文章都在这里哟,后续更多的文章内容可以点击查看】 【1.SpringBoot初识之Spring注解发展流程以及常用的Spring和SpringBoot注解】 【2.SpringBoot自动装配之SPI机制&SPI案例实操学习&SPI机制核心源码学习】 【3.详细学…

Transformer图解

Transformer正在席卷自然语言处理领域。 这些令人难以置信的模型正在打破多项 NLP 记录并推动最先进的技术发展。 它们被用于许多应用程序,如机器语言翻译、会话聊天机器人,甚至为更好的搜索引擎提供动力。 Transformer在当今深度学习领域风靡一时&…

POSTGRESQL 13.1 bug 与 逻辑复制槽参数调优

随着问问题的同学越来越多,公众号内部私信回答问题已经很困难了,所以建立了一个群,关于各种数据库的问题都可以,目前主要是 POSTGRESQL, MYSQL ,MONGODB ,POLARDB ,REDIS,SQL SERVER 等,期待你的加入&#…

pytorch 多卡运行详细教程

先说明一下背景,目前正在魔改以下这篇论文的代码: https://github.com/QipengGuo/GraphWriter-DGLgithub.com 由于每次完成实验需要5个小时(baseline),自己的模型需要更久(2倍),非…

战略和什么相关?

(1)战略和创新企业做到最大,就是业务多元化/一体化、区域全球化。想再折腾折腾,那就手里这几张牌搞重新排列组合,这就是:企业再造。就是中国人说的:天下大势分久必合合久必分。按照波士顿咨询来…

20221224英语学习

今日词汇 lash v.将(物品)系牢,捆绑;(风、雨等)猛烈打击;鞭打;猛烈抨击,严厉斥责 detective n.侦探; 警探; 发掘者; 发现者 division n.分开; 分隔; 分配; 分隔物; 刻…

深度学习SSD算法

目录1 SSD网络结构1.1 backbone1.2 extra部分1.3 loc和cls1.3.1 PriorBox层先验框的生成方法1.3.2 loc的预测结果2 模型训练2.1 正负样本标记2.2 损失函数2.3 困难样本挖掘3 模型预测4 总结1 SSD网络结构 SSD是YOLO V1出来后,YOLO V2出来前的一款One-stage目标检测…