Apache Ignite - 分布式队列和执行器
Apache Ignite - Distibuted Queue and Executors
我打算使用 Apache Ignite 分布式队列。
我将 Ignite 与 spring 启动应用程序一起使用。因此,在启动时,我将在队列中添加 20 个名称。但是,由于集群中有 3 个服务器,所以相同的 20 个名称被添加了 3 次。但是,我只想在队列中添加一次。
Ignite ignite = Ignition.ignite();
IgniteQueue<String> queue = ignite.queue(
"queueName", // Queue name.
0, // Queue capacity. 0 for unbounded queue.
null // Collection configuration.
);
分布式执行器,将能够从队列中轮询和 运行 任务。在这里,执行者需要轮询 运行 任务,然后将同名任务添加到队列中。试图在这里实现循环。
尽管集群中有多个服务器,但在任何时间点都应该只有一个执行程序 运行 执行相同的任务。
对此有何建议。
您可以启动 ignite 集群单例服务 https://apacheignite.readme.io/docs/cluster-singletons,它将数据填充到队列中。您还可以从协调器节点(集群中最旧的节点)添加数据 ignite.cluster().forOldest().node().isLocal()
我通过这种方式修复了启动时间重复缓存加载问题:
final IgniteAtomicLong cacheLoadCnt = ignite.atomicLong(cacheName + "Cnt", 0, true);
if (cacheLoadCnt.get() == 0) {
loadCache();
cacheLoadCnt.addAndGet(1);
}
我打算使用 Apache Ignite 分布式队列。
我将 Ignite 与 spring 启动应用程序一起使用。因此,在启动时,我将在队列中添加 20 个名称。但是,由于集群中有 3 个服务器,所以相同的 20 个名称被添加了 3 次。但是,我只想在队列中添加一次。
Ignite ignite = Ignition.ignite();
IgniteQueue<String> queue = ignite.queue(
"queueName", // Queue name.
0, // Queue capacity. 0 for unbounded queue.
null // Collection configuration.
);
分布式执行器,将能够从队列中轮询和 运行 任务。在这里,执行者需要轮询 运行 任务,然后将同名任务添加到队列中。试图在这里实现循环。 尽管集群中有多个服务器,但在任何时间点都应该只有一个执行程序 运行 执行相同的任务。
对此有何建议。
您可以启动 ignite 集群单例服务 https://apacheignite.readme.io/docs/cluster-singletons,它将数据填充到队列中。您还可以从协调器节点(集群中最旧的节点)添加数据 ignite.cluster().forOldest().node().isLocal()
我通过这种方式修复了启动时间重复缓存加载问题:
final IgniteAtomicLong cacheLoadCnt = ignite.atomicLong(cacheName + "Cnt", 0, true);
if (cacheLoadCnt.get() == 0) {
loadCache();
cacheLoadCnt.addAndGet(1);
}