akka 异常处理_使用Akka处理1000万条消息
akka 異常處理
Akka演員承諾并發(fā)。 有什么更好的模擬方法,看看使用商品硬件和軟件處理1000萬條消息需要花費(fèi)多少時(shí)間,而無需進(jìn)行任何低級(jí)調(diào)整。我用Java編寫了整個(gè)1000萬條消息的處理過程,整個(gè)結(jié)果令我驚訝。當(dāng)我在具有i5 – 4核心,4 Gb RAM計(jì)算機(jī)和JVM堆的Intel i5 – 4內(nèi)核的iMac計(jì)算機(jī)上運(yùn)行程序時(shí),該程序在23秒內(nèi)處理了1000萬臺(tái)計(jì)算機(jī)。 我多次運(yùn)行該程序,平均時(shí)間為25秒。 因此,我收到的吞吐量幾乎在每秒40萬條消息的范圍內(nèi),這是驚人的。
下圖說明了用于模擬負(fù)載生成方案的流程。
警告:每條消息在1秒鐘后發(fā)送響應(yīng),這對(duì)于實(shí)際情況而言并非正確的模擬。 在這種情況下,消息處理將消耗堆和gc活動(dòng)上一些未被考慮的資源。
該程序使用了Akka發(fā)布者的總體指導(dǎo):在75秒內(nèi)處理了1000萬條消息(每條消息1秒)! 雖然沒有任何限制。
該程序的代碼庫位于以下位置– https://github.com/write2munish/Akka-Essentials
ApplicationManagerSystem創(chuàng)建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收到了消息,則計(jì)劃將響應(yīng)在1000毫秒后發(fā)送
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的響應(yīng)消息被發(fā)送到JobControllerActor,后者收集所有響應(yīng)。
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 異常處理
總結(jié)
以上是生活随笔為你收集整理的akka 异常处理_使用Akka处理1000万条消息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SE 手游《最终幻想 7:永恒危机》下载
- 下一篇: 拉瑞安工作室:正在对《博德之门 3》PS