akka 异常处理

Akka演员承诺并发。 有什么更好的模拟方法,看看使用商品硬件和软件处理1000万条消息需要花费多少时间,而无需进行任何低级调整。我用Java编写了整个1000万条消息的处理过程,整个结果令我惊讶。

当我在具有i5 – 4核心,4 Gb RAM计算机和JVM堆的Intel i5 – 4内核的iMac计算机上运行程序时,该程序在23秒内处理了1000万台计算机。 我多次运行该程序,平均时间为25秒。 因此,我收到的吞吐量几乎在每秒40万条消息的范围内,这是惊人的。

下图说明了用于模拟负载生成方案的流程。

警告:每条消息在1秒钟后发送响应,这对于实际情况而言并非正确的模拟。 在这种情况下,消息处理将消耗堆和gc活动上一些未被考虑的资源。

该程序使用了Akka发布者的总体指导:在75秒内处理了1000万条消息(每条消息1秒)! 虽然没有任何限制。

该程序的代码库位于以下位置– https://github.com/write2munish/Akka-Essentials

ApplicationManagerSystem创建actor并泵送至WorkerActor的流量

private ActorSystem system;private final ActorRef router;private final static int no_of_msgs = 10 * 1000000;public ApplicationManagerSystem() {final int no_of_workers = 10;system = ActorSystem.create('LoadGeneratorApp');final ActorRef appManager = system.actorOf(new Props(new UntypedActorFactory() {public UntypedActor create() {return new JobControllerActor(no_of_msgs);}}), 'jobController');router = system.actorOf(new Props(new UntypedActorFactory() {public UntypedActor create() {return new WorkerActor(appManager);}}).withRouter(new RoundRobinRouter(no_of_workers)));}private void generateLoad() {for (int i = no_of_msgs; i >= 0; i--) {router.tell('Job Id ' + i + '# send');}System.out.println('All jobs sent successfully');}

一旦WorkerActor收到了消息,则计划将响应在1000毫秒后发送

public class WorkerActor extends UntypedActor {private ActorRef jobController;@Overridepublic void onReceive(Object message) throws Exception {using scheduler to send the reply after 1000 millisecondsgetContext().system().scheduler().scheduleOnce(Duration.create(1000, TimeUnit.MILLISECONDS),jobController, 'Done');}public WorkerActor(ActorRef inJobController) {jobController = inJobController;}}

来自WorkerActor的响应消息被发送到JobControllerActor,后者收集所有响应。

public class JobControllerActor extends UntypedActor {int count = 0;long startedTime = System.currentTimeMillis();int no_of_msgs = 0;@Overridepublic void onReceive(Object message) throws Exception {if (message instanceof String) {if (((String) message).compareTo('Done') == 0) {count++;if (count == no_of_msgs) {long now = System.currentTimeMillis();System.out.println('All messages processed in '+ (now - startedTime)  1000 + ' seconds');System.out.println('Total Number of messages processed '+ count);getContext().system().shutdown();}}}}}

参考: 教程:Hibernate,JPA和Spring MVC –来自Akka Essentials博客的JCG合作伙伴 Munish K Gupta的第2部分 。

翻译自: https://www.javacodegeeks.com/2012/05/processing-10-million-messages-with.html

akka 异常处理

akka 异常处理_使用Akka处理1000万条消息相关推荐

  1. 使用Akka处理1000万条消息

    Akka演员承诺并发. 有什么更好的模拟方式,看看使用商品硬件和软件处理1000万条消息需要花费多少时间,而无需进行任何低级调整.我用Java编写了整个1000万条消息的处理过程,整个结果令我惊讶. ...

  2. 1000并发 MySQL数据库_再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化...

    继上篇文章<绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来>发布后在博客园首页展示得到了挺多的阅读量,我这篇文章就是对上篇文章的千万级数据库表在高并发访问下如何进行 ...

  3. mysql 1000万数据读取_插入1000万条数据到mysql数据库表

    转自:https://www.cnblogs.com/fanwencong/p/5765136.html 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入100 ...

  4. 批量往mysql里面插入1000万条数据_绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来...

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  5. mysql 插入秒_教你88秒插入1000万条数据到mysql数据库表,IG牛逼

    我用到的数据库为,mysql数据库5.7版本的首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: com ...

  6. java mysql 快速插入1000w条数据_教你88秒插入1000万条数据到mysql数据库表

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  7. 再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化

    原文:再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化 继上篇文章<绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来>发布后在博客园首页展示 ...

  8. 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  9. 插入1000万条数据到mysql数据库表

    转自:https://www.cnblogs.com/fanwencong/p/5765136.html 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入100 ...

最新文章

  1. 关于PIC和FPGA
  2. GridView 使用方法总结
  3. 如何找到Angular应用的某个directive是属于哪一个Angular module
  4. 【OpenCV】imread读取数据为空
  5. NO.10章 图(遍历、最短路、生成树、拓扑、关键路径)
  6. 《企业软件交付:敏捷与高效管理精要》——2.8 结论
  7. NS2 分裂机制及代码分析一
  8. ImmuniWeb 推出暗网数据泄露免费查询工具,使用超简单
  9. 从零基础入门Tensorflow2.0 ----三、6. 实战tf.constant
  10. Linux dstat 命令
  11. 【操作系统 · 调度】多处理器 实时调度
  12. 2G 3G和4G物联网卡之间的区别
  13. 混合非线性整数规划matlab,非线性整数规划matlab
  14. 【Xbox one S】开箱开机初入坑心得
  15. python二级考试操作题6答案_python二级考试试题6
  16. VS2019配置WinRT
  17. java调用ltp_LTP随笔——本地调用ltp之ltp4j
  18. [译]一个健壮且可扩展的 CSS 架构所需的 8 个简单规则
  19. Elasticsearch 如何实现时间差查询?
  20. Light OJ 1256

热门文章

  1. 《金色梦乡》金句摘抄(十一)
  2. 《白鹿原》金句摘抄(一)
  3. C#中的序列化和反序列化案例
  4. Oracle数据库基本概念理解(2)
  5. React中解决样式丢失问题
  6. Mybatis传入参数类型为ListIntergert作为条件进行查询
  7. 互联网+大赛作品_“颂中国力量 绘美好梦想”全市中小学生互联网+书画大赛作品展示(五)...
  8. RandomAccessFile类解析
  9. maven 构建增量包_使用Maven进行增量构建
  10. java全局变量和局部变量_Java 10 –局部变量类型推断