使用Hazelcast,我可以使用imap.aggregate(...)方法运行聚合作业。引擎盖下的这个方法使用IExecutorService,并根据你进行聚合的地图为它命名。
当我尝试并行运行聚合作业时,我得到了大量的RejectedExecutionExceptions。
我找到了一种解决方法,通过在我创建我的Hazelcast实例之前专门为我要尝试聚合的地图添加ExecutorConfig来工作:
Config cfg = new Config();
....
ExecutorConfig execCfg = new ExecutorConfig("<exec_name_used_by_aggregate>");
cfg.addExecutorConfig(execCfg);
....
Hazelcast.newHazelcastInstance(cfg);
....
现在,这种方法要求我知道在Hazelcast实例启动和运行时我将需要的所有执行程序的确切名称,因为如果我没有弄错,我无法在运行时更改实例的配置,对吗?这种方法还允许我指定线程池大小和队列大小,但我还必须在启动实例之前按ExecutionConfig设置它们。这需要我知道在实例启动/填充之前所需的最佳线程数。
所以,这给我带来了一些问题: