ApacheIgnite-分布式队列和执行器

ApacheIgnite-分布式队列和执行器,ignite,Ignite,我计划使用ApacheIgnite分布式队列 我将Ignite与spring boot应用程序一起使用。因此,在启动时,我将在一个队列中添加20个名称。但是,由于集群中有3台服务器,相同的20个名称会被添加3次。但是,我只想在队列中添加它们一次 Ignite ignite = Ignition.ignite(); IgniteQueue<String> queue = ignite.queue( "queueName", // Queue name. 0,

我计划使用ApacheIgnite分布式队列

我将Ignite与spring boot应用程序一起使用。因此,在启动时,我将在一个队列中添加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-Ignite=Ignition.Ignite();
IgniteQueue=ignite.queue(
“queueName”,//队列名称。
0,//队列容量。0表示无界队列。
空//集合配置。
);
分布式执行器将能够从队列中轮询并运行任务。在这里,执行者需要轮询、运行任务,然后将相同的名称添加到队列中。试图在这里实现循环赛。 尽管集群中有多个服务器,但在任何时间点都只能有一个执行者运行同一任务


对此有何建议。

您可以启动ignite cluster singleton服务,该服务将向队列中填充数据。此外,您还可以从协调器节点(群集中最早的节点)ignite.cluster().ForOlester().node().isLocal()添加数据。我通过以下方式修复了启动时间重复缓存加载问题:

final IgniteAtomicLong cacheLoadCnt = ignite.atomicLong(cacheName + "Cnt", 0, true);
if (cacheLoadCnt.get() == 0) {
    loadCache();
    cacheLoadCnt.addAndGet(1);
}

我两者都需要吗?我希望,只需检查ignite.cluster().ForOlester().node().isLocal()即可。是的,检查Olester node就足够了。@user1578872您能用最终实现的代码更新您的问题吗?