/** 初始化定时线程池 */
  private void initScheduler() {
    // 根据定时flush时间间隔分类,计算定时线程池大小,并初始化
    final Set<Integer> tmpSet = new HashSet<Integer>();
    for (final String topic : this.metaConfig.getTopics()) {
      final int unflushInterval = this.metaConfig.getTopicConfig(topic).getUnflushInterval();
      tmpSet.add(unflushInterval);
    }
    this.scheduledExecutorService = new ScheduledThreadPoolExecutor(tmpSet.size() + 5);

    try {
      if (DirectSchedulerFactory.getInstance().getAllSchedulers().isEmpty()) {
        DirectSchedulerFactory.getInstance()
            .createVolatileScheduler(this.metaConfig.getQuartzThreadCount());
      }
      this.scheduler = DirectSchedulerFactory.getInstance().getScheduler();
    } catch (final SchedulerException e) {
      throw new ServiceStartupException("Initialize quartz scheduler failed", e);
    }
  }
 /** Initialises the scheduler. */
 public void initProvider() throws CronProviderInitialisationException {
   instanceId = UUID.randomUUID();
   final JobStore jobStore = new RAMJobStore();
   final ThreadPool threadPool = new SimpleThreadPool(4, Thread.NORM_PRIORITY);
   try {
     threadPool.initialize();
   } catch (SchedulerConfigException ex) {
     throw new CronProviderInitialisationException("Error initializing Quartz ThreadPool", ex);
   }
   final DirectSchedulerFactory schedulerFactory = DirectSchedulerFactory.getInstance();
   schedulerName = SCHEDULER_NAME_PREFIX + "_" + instanceId.toString();
   try {
     schedulerFactory.createScheduler(schedulerName, instanceId.toString(), threadPool, jobStore);
     scheduler = schedulerFactory.getScheduler(schedulerName);
     scheduler.start();
   } catch (SchedulerException ex) {
     throw new CronProviderInitialisationException("Error initializing Quartz scheduler", ex);
   }
 }