ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Camel - DefaultReactiveExecutor

2021-02-10 17:30:44  阅读:195  来源: 互联网

标签:runnable LOG Camel Worker back queue DefaultReactiveExecutor executor


Camel - DefaultReactiveExecutor

DefaultReactiveExecutor

作用:

用于创建Worker,并对监控Worker的运行情况;监控内容包括:

  • 已创建Worker
  • 正在执行的Worker
  • 当前挂起的任务数

一个Worker 对应一个Thread。

每个Worker创建时会记录自己的编号,并且会创建一个双端队列(Deque),如果是异步消息往队列头部添加任务,如果是同步消息往尾部添加任务。

org.apache.camel.impl.engine.DefaultReactiveExecutor.Worker#schedule

void schedule(Runnable runnable, boolean first, boolean main, boolean sync) {
 if (LOG.isTraceEnabled()) {
     LOG.trace("Schedule [first={}, main={}, sync={}]: {}", first, main, sync, runnable);
 }
 if (main) {
     if (!queue.isEmpty()) {
         if (back == null) {
             back = new ArrayDeque<>();
         }
         back.push(queue);
         queue = new ArrayDeque<>();
     }
 }
 if (first) {
     queue.addFirst(runnable);
     executor.pendingTasks.incrementAndGet();
 } else {
     queue.addLast(runnable);
     executor.pendingTasks.incrementAndGet();
 }
 if (!running || sync) {
     running = true;
     executor.runningWorkers.incrementAndGet();
     try {
         for (;;) {
             final Runnable polled = queue.pollFirst();
             if (polled == null) {
                 if (back != null && !back.isEmpty()) {
                     queue = back.pollFirst();
                     continue;
                 } else {
                     break;
                 }
             }
             try {
                 executor.pendingTasks.decrementAndGet();
                 if (LOG.isTraceEnabled()) {
                     LOG.trace("Worker #{} running: {}", number, runnable);
                 }
                 polled.run();
             } catch (Throwable t) {
                 LOG.warn("Error executing reactive work due to " + t.getMessage() + ". This exception is ignored.",
                         t);
             }
         }
     } finally {
         running = false;
         executor.runningWorkers.decrementAndGet();
     }
 } else {
     if (LOG.isTraceEnabled()) {
         LOG.trace("Queuing reactive work: {}", runnable);
     }
 }
}

标签:runnable,LOG,Camel,Worker,back,queue,DefaultReactiveExecutor,executor
来源: https://blog.csdn.net/ttyy1112/article/details/113783035

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有