我打算使用Apache Ignite Distributed Queue。
我正在使用带有Spring启动应用程序的Ignite。因此,在启动时,我将在队列中添加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.
);
分布式执行程序,将能够从队列中轮询并运行任务。这里,执行程序需要轮询,运行任务,然后将相同的名称添加到队列中。试图在这里实现循环赛。 尽管群集中有多个服务器,但只有一个执行程序应该在任何时间运行相同的任务。
对此有任何建议。
答案 0 :(得分:1)
您可以启动点火群集单件服务https://apacheignite.readme.io/docs/cluster-singletons,它将数据填充到队列中。您还可以从协调器节点(群集中最旧的节点)添加数据 ignite.cluster()。forOldest()。node()。isLocal()
答案 1 :(得分:0)
我通过以下方式解决了启动时间重复缓存加载问题:
final IgniteAtomicLong cacheLoadCnt = ignite.atomicLong(cacheName + "Cnt", 0, true);
if (cacheLoadCnt.get() == 0) {
loadCache();
cacheLoadCnt.addAndGet(1);
}