Akka工具(一)—Scheduler

Actor模型与Akka Actor模型与Akka 一. Actor模型 Actor模型概念 一个概念模型,用于处理并发计算 Actor模型内部的状态由自己的行为维护,外部线程不能直接调用对象的行为,必须通过消息才能激发行为,这样就保证Actor内部数据只有被自己修改 Actor模型组成 Actor模型详解 在Actor模型中,一切都可以抽象为Actor,一个Actor指的是一个最基本的计... 阅读详情

小李:小胖,12月06日是我爸的生日,我怕那一天忘了,应该怎么办啊,你到时能提醒我一下吗?非常感谢。

小胖:我也可能忘记啊,你再想想其它办法吧!

小李:那怎么办啊,这么重要的日子,我可不能忘记啊。

小胖:咦,你不是已经有手机了吗?我听说现在手机有日历功能,有定时提醒功能,可以试试看。

小李:对啊,我们要物尽其用啊。

五分钟后......

小李:好了,我刚刚测试了一下,果然可行,谢谢你啊,小胖,还是你聪明。

     Scheduler

       假如我们想在某个时刻或者某段时间处理某个任务,Akka中应该怎样处理呢?既然这个问题我们都已经想到了,那么Akka设计人员肯定想到了。别担心,Akka已经提供了Scheduler对象帮助我们实现定时调度功能。

       Scheduler对象不是通过new出来的,而是需要依赖ActorSystem得到,它在整个ActorSystem中是单例的,是唯一的。Scheduler提供两种定时调度,用于不同的需求,总结如下:

调度API

说明

scheduleOnce

表示延迟一段时间后执行

scheduler

表示延迟后定时重复执行,返回Cancellable对象,可用于取消该定时调度

参数分析:

Duration delay,延迟调度时间,可选值有day、hour、minute、second、millisecond等

ActorRef receiver,消息处理类

Object message,定时发送的消息体

ExecutionContext executor,线程调度

ActorRef sender,接受receiver消息返回值

关于这两种不同的调度方式,我们使用代码来区分它们。

     scheduleOnce

首先我们创建一个定时消息处理类HandlerActor,

public class HandlerActor extends AbstractActor {
    
    private final LoggingAdapter logger = Logging.getLogger(getContext().getSystem(),this);



    @Override

    public Receive createReceive() {

        return receiveBuilder().match(String.class, logger::info)

                .matchAny((Object other) -> logger.info("其它未知消息:" + other))

                .build();

        }

}

现在,我们模拟100毫秒之后,给HandlerActor发送消息,如下:

ActorSystem system = ActorSystem.create("system");

ActorRef handlerActor = system.actorOf(Props.create(HandlerActor.class), "handlerActor");

//延迟100ms后,给handlerActor发送当前时间消息

system.scheduler().scheduleOnce(Duration.ofMillis(100),handlerActor, LocalDateTime.now(),system.dispatcher(),ActorRef.noSender());

当然,我们也可以这样写:

system.scheduler().scheduleOnce(Duration.ofMillis(100), new Runnable() {

    @Override

    public void run() {

        handlerActor.tell(LocalDateTime.now(),ActorRef.noSender());

    }

},system.dispatcher());

执行结果都一样,如下:

[INFO] [11/24/2018 11:04:02.685] [system-akka.actor.default-dispatcher-5] [akka://system/user/handlerActor] 其它未知消息:2018-11-24T11:04:02.683

scheduleOnce延迟100s后,只发送一次当前时间给handlerActor,后续不会再执行。

     scheduler

       我们还是沿用上述HandlerActor继续处理消息,现在我们想每隔1s后打印当前时间,修改如下:

public Receive createReceive() {

    return receiveBuilder().matchEquals("time", s -> System.out.println(LocalDateTime.now())).build();

}

执行调度:

system.scheduler().schedule(Duration.ZERO, Duration.ofSeconds(1), handlerActor, "time", system.dispatcher(), ActorRef.noSender());

执行结果:

2018-11-24T11:37:00.864

2018-11-24T11:37:01.869

2018-11-24T11:37:02.879

2018-11-24T11:37:03.878

2018-11-24T11:37:04.878

2018-11-24T11:37:05.883

2018-11-24T11:37:06.861

       大家可以看到,每隔1s就打印出了当前时间,当我们不在需要该输出的时候,可以使用cancel方法停止该定时调度,cancel不会停止当前正在调度的任务,如下:

       schedule.cancel();

       大家可以使用sleep()方法模拟调度时长,自行调试。

        在Actor系统启动后,会读取akka.scheduler.implementation这个配置项,默认采用LightArrayRevolverScheduler,源配置(reference.conf中)如下:

# This setting selects the timer implementation which shall be loaded at

# system start-up.

# The class given here must implement the akka.actor.Scheduler interface

# and offer a public constructor which takes three arguments:

# 1) com.typesafe.config.Config

# 2) akka.event.LoggingAdapter

# 3) java.util.concurrent.ThreadFactory

implementation = akka.actor.LightArrayRevolverScheduler

   这代表我们可以实现自己的定时调度,通过extends AbstractScheduler 就可以快速实现。

 

akka-quartz-scheduler:Quartz扩展和实用程序,用于Akka中的cron式调度 阿卡石英计 Quartz扩展和实用程序,可在Akka 2.6.x中进行真正的调度。 当前版本是针对Scala 2.13.x和Akka 2.6.x构建的,可在Maven Central上使用。 如果您想支持Scala和Akka的其他组合,只需将您的请求发布在问题页面上(以及为什么当前可用的版本对您不起作用的原因。我一直对这些事情感到好奇)。 为什么选择Akka和Quartz? 请注意,由于以下原因,它被命名为akka-quartz-scheduler并被定位为目标:它不是Quartz的完整端口。 相反,我们利用Quartz的调度系统的概念为Akka提供了比现有的调度组件更健壮和可靠的调度组件。 这里的目标是为Akka提供一个调度系统,该调度系统与人们对Cron型作业的期望更加接近-设置可以长时间运行的ActorSystem,这些事件可以由Quartz启动。 目前尚无任何计划与分布式 立即下载

相关推荐

别再手动算频谱了!用这个在线FFT工具,5分钟搞定JSON/CSV数据分析

本文介绍了一款高效的在线FFT工具,帮助用户快速分析JSON/CSV格式的时域数据,5分钟内完成频谱分析。通过傅里叶变换(FFT)算法,大幅提升计算效率,解决传统手动计算的痛点,适用于工业振动分析、设备故障诊断等场景。

weixin_29172201的博客 262

Akka定时任务schedule()方法

Akka定时任务schedule()方法,什么是Akka定时任务schedule()方法?如何在actor外部获取Scheduler对象,为什么需要提供一个隐式的ExecutionContext对象,用于执行定时任务?如何在actor内部获取Scheduler对象,schedule()方法的格式,Akka定时任务schedule()方法有哪些类型的延迟?固定延迟,固定频率,Duration类

Maverick_曲流觞的博客 1232

现代 AI Agent 编排技术全景(1)—— 分类体系与四大技术维度

本文介绍基于 LLM 的现代 Agent 分类体系与四大技术维度,形成能够刻画不同 Agent 产品架构特征的分类法

佚失的诗篇 238

Akka(4): Routers - 智能任务分配

Actor模式最大的优点就是每个Actor都是一个独立的任务运算器。这种模式让我们很方便地把一项大型的任务分割成若干细小任务然后分配给不同的Actor去完成。优点是在设计时可以专注实现每个Actor的功能,在实际运算时由于每个Actor都在独立的线程里运行,能充分利用多核CPU的优势实现相似并行运算的效率。我们同样可以把一个独立的功能按不同的输入分配给多个Actor去完成以达到同...

weixin_30355437的博客 189

Qt图表库三选一:Qwt、QChart、QCustomPlot实战性能对比与避坑指南

本文深入对比了Qt开发中三大主流图表库Qwt、QChart和QCustomPlot的性能与适用场景。通过实测数据展示各库在渲染效率、内存占用和功能特性上的差异,并提供针对不同项目需求的选型建议和集成避坑指南,帮助开发者高效选择最适合的Qt图表解决方案。

weixin_33691700的博客 449

C++坦克大战源代码

【代码】C++坦克大战源代码。

强国豪,林中霖 2610

ngx-quill国际化支持:构建多语言富文本编辑器的完整流程

ngx-quill是一款基于Angular框架的强大富文本编辑器组件,它为开发者提供了在Angular应用中集成Quill编辑器的便捷方式。本文将详细介绍如何为ngx-quill实现国际化支持,帮助你轻松构建支持多语言的富文本编辑功能。 ## 为什么需要ngx-quill国际化支持? 在全球化应用开发中,富文本编辑器作为用户交互的重要组件,其国际化支持至关重要。通过ngx-quill的国际化配

gitblog_00078的博客 442

Ubuntu22.04通过DKMS包安装Intel WiFi系列适配器(网卡驱动)

Ubuntu安装Intel WiFi系列适配器(网卡驱动)

lu_linux的博客 2602

scala_Akka并发编程框架

文章目录Akka并发编程框架简介Akka介绍Akka特性Akka通信过程创建ActorAPI介绍入门案例实现步骤1. 创建Maven模块2. 创建并加载Actor3. 发送/接收消息Akka定时任务使用方式示例一示例二实现两个进程之间的通信案例介绍1. Worker实现2. Master实现简易版spark通信框架案例案例介绍实现思路1. 工程搭建2. 构建Master和Worker3. Work...

Imflash的博客 641

uniapp - 解决报错 TypeError: e[t] is not a function(Uniapp项目运行或打包编译时提示错误e[t] is not a function,全平台端均可搞定)

uniapp,报错,TypeError: e[t] is not a function,uniapp App端报错,Android端,苹果ios打包报错,运行报错,uniapp打包报错e[t] is not a function,无法运行提示错误,uniapp live-pusher直播推流,maps地图组件,uni-app live-pusher 报错TypeError: e[t] is not a function,uni-app maps报错TypeError: e[t] is not a funct

✅ 精选推荐文章 8223

AI工具 | 每个打工人必备的15款人工智能超级工具

不过,还是有一些靠谱的人工智能平台,它们可不只是营销噱头。有些AI公司正试图改变游戏规则。人工智能工具让人们能够更聪明地工作,而不是更辛苦地劳作。如果你想知道未来有什么,那就来看看这10款人工智能工具吧,它们将彻底改变我们的工作方式。

Vampire_2017的博客 5万+

Scala 中使用 akka system 的 scheduler 的例子

这是在scala控制台直接执行的例子。 import akka.actor._ import scala.concurrent.duration._ import scala.concurrent.Future val system = ActorSystem("mySystem") import system.dispatcher Future { ...

weixin_30488085的博客 307

机器人控制仿真软件:MATLAB Simulink Control System Toolbox_(1).MATLAB基础知识

MATLAB(Matrix Laboratory)是由MathWorks公司开发的一种高性能数值计算和可视化软件。它广泛应用于科学计算、工程设计、信号处理、控制系统设计、图像处理等领域。强大的矩阵运算能力:MATLAB的核心是矩阵运算,能够高效处理大规模的数值数据。丰富的工具箱:MATLAB提供了大量的工具箱,如Control System Toolbox、Simulink、Signal Processing Toolbox等,这些工具箱覆盖了多个应用领域。易于使用的图形界面。

kkchenjj的博客 907

akka现有的分布式定时任务框架总结

Openjob 是一个基于 Akka 架构的新一代分布式任务调度框架,支持多种定时任务、延时任务、工作流设计,采用无中心化架构,底层使用一致性分片算法,支持无限水平扩容。k-job 是一个基于 PowerJob 重写和重构的分布式任务框架,支持定时任务、负载均衡和 OpenAPI 异步调用。如果你正在寻找一个高性能、支持多种任务类型(包括定时任务、延时任务、工作流设计)的分布式任务调度框架,延时任务:基于 Redis 实现高性能延时任务,底层实现任务多级存储,提供丰富的统计和报表。

红豆和绿豆的博客 1330

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

AKKA Actor Scheduler

AKKA Actor Scheduler If I want the actor work like cron repeat the messages. I will do like this. val schedulerSyncActor = Akka.system.actorOf(SchedulerSyncActor.props, name = "scheduler-sync-...

快马扬鞭须努力! 428

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

akka入门-定时器

使用定时器可以实现将来发生的事情进行计划执行。以下代码演示了过一段时间向Actor发送消息。 1.编写Actor 在Actor中只是打印出接收到的消息 import akka.actor.UntypedActor; import akka.event.Logging; import akka.event.LoggingAdapter; public class TestActor ex

长青树呀 6369

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

akka配置_Akka Notes – ActorSystem(配置和计划)– 4

akka配置 当我们从以前的帖子看到,我们可以创建一个使用一个演员actorOf的方法ActorSystem 。 实际上,您可以使用ActorSystem做更多的事情。 在本文中,我们将仅介绍Configuration和Scheduling位。 让我们看一下ActorSystem中可用方法的子集。 1.配置管理 还记得我们在上一篇文章中用来配置日志级别的application.co...

220

Akka注释– ActorSystem(配置和计划)– 4

当我们从以前的帖子看到,我们可以创建一个使用一个演员actorOf的方法ActorSystem 。 实际上,ActorSystem还可以做更多的事情。 在本文中,我们将仅介绍Configuration和Scheduling位。 让我们看一下ActorSystem中可用方法的子集。 1.配置管理 还记得我们在上一篇文章中用来配置日志级别的application.conf文件吗? 该...

676

Akka并发编程-Akka特性,并实现两个进程之间的通信(含完整Demo)

Akka介绍 Akka是一个用于构建高并发、分布式和可扩展的基于事件驱动的应用的工具包。Akka是使用scala开发的库,同时可以使用scala和Java语言来开发基于Akka的应用程序。 Akka特性 提供基于异步非阻塞、高性能的事件驱动编程模型 内置容错机制,允许Actor在出错时进行恢复或者重置操作 超级轻量级的事件处理(每GB堆内存几百万Actor) 使用Akka可以在单机上构建高并发程序,也可以在网络中构建分布式程序。 Akka通信过程 以下图片说明了Akka Actor的并发编程模型的基本流

beishanyingluo的博客 1559

akka 定时任务实例for play2.1

有时需要设定将来发生的事情,这时该怎么办?ActorSystem搞定一切!     在那儿你能找到scheduler方法,它返回一个 akka.actor.Scheduler 实例, 这个实例在每个Actor系统里是唯一的,用来指定一段时间后发生的行为。     请注意定时任务是使用ActorSystem的MessageDispatcher执行的.     你可以计划向actor发送消息

w_j_w2010的博客 3433

Scala基础教程--20--Akka

1. 理解Akka并发编程框架简介 2. 掌握Akka入门案例 3. 掌握Akka定时任务代码实现 4. 掌握两个进程间通信的案例 5. 掌握简易版spark通信框架案例

kc44601的博客 1497

Akka in Schedulerx2.0

1. 前言 Schedulerx2.0是阿里中间件自研的基于akka架构的新一代分布式任务调度平台,提供定时、任务编排、分布式跑批等功能,具有高可靠、海量任务、秒级调度等能力。 本篇文章以Schedulerx2.0为例子,介绍akka的应用场景,希望能给同样从事分布式系统开发的同学一些启...

chuohuanghan7401的博客 129

scala-7 Akka并发编程框架

Akka并发编程框架简介 Akka介绍 Akka是一个用于构建高并发、分布式和可扩展的基于事件驱动的应用的工具包。Akka是使用scala开发的库,同时可以使用scala和Java语言来开发基于Akka的应用程序。 Akka特性 提供基于异步非阻塞、高性能的事件驱动编程模型 内置容错机制,允许Actor在出错时进行恢复或者重置操作 超级轻量级的事件处理(每GB堆内存几百万Actor) 使用Akka可以在单机上构建高并发程序,也可以在网络中构建分布式程序。 Akka通信过程 以下图片说明了Ak

QYmufeng的博客 603

Akka in JAVA(二)

继续Akka in JAVA(一)中所讲.Actor调用从上面的例子中,我们可以大概的对AKKA在JAVA中的使用有一个全局的概念.这里我们在稍微细致的讲解一下.在JAVA中使用AKKA进行开发主要有这几个步骤:定义消息模型.创建Actor的实现,以及业务逻辑在需要使用AKKA的地方获取到ActorSystem,然后根据业务的数据流,获取到合适的Actor,给Actor发送消息.在Actor的实现...

linuxarmsummary的专栏 1591

Akka笔记之配置及调度

正如前几篇文章中所看到的,我们可以通过ActorSystem的actorOf方法来创建一个Actor。其实ActorSystem还可以做许多事情。本篇中我们来看下如何用它来进行配置及调度。 我们先看下ActorSystem里的方法的一个子集。 1. 配置管理 还记得前面我们用来配置日志级别的那个application.conf文件吗?它就好比Java程序里的那些.prop

Simon 3882

Akka定时任务

package com.itcast.akka.sheduler import akka.actor.{Actor, ActorSystem, Props} import com.typesafe.config.ConfigFactory class _02ShedulerDemo { object ReceiveActor extends Actor{ override def receive: Receive = { case x => println(x) } } def main(args:

大数据进阶之路 992
上一篇: 消息路由
下一篇: Akka工具(二)—Future
西红柿丶番茄
博客等级 码龄10年 21粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值