Apache Ignite CollisionSpi 配置

问题描述

我有一个要求,例如“仅允许按顺序运行同一缓存上的缓存更新”。我们的客户端节点是用 .net 编写的。

每个缓存都有关联键,我们使用 computeJob.AffinityCallAsync("cacheName","affinityKey",job) 提交计算作业以供执行。

现在如果我使用collisionSpi,我可以实现“在同一节点上为同一缓存运行同步作业”吗?我需要使用什么配置?

我是否需要为所有节点(服务器和客户端)编写相同的配置?我看到collisionSpi 没有实现.net,那么我可以为.net 客户端节点做些什么?

解决方法

将您的作业逻辑包装在 lock 中以使其按顺序运行:

public class MyJob : IComputeFunc<string>
{
    private static readonly object SyncRoot = new object();

    public string Invoke()
    {
        lock (SyncRoot)
        {
            // Update cache
        }
    }
}

注意事项:

  • ICache.Invoke 可能更适合您的用例
  • 顺序更新的要求听起来很奇怪,可能会导致性能欠佳:Ignite 缓存并发更新是安全的。请确保此要求有意义。

更新

添加锁将确保一次更新在给定节点上。其他节点可以并行执行更新。更新顺序也无法保证。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...