5.3. 为锁定配置内部缓存

集群锁定管理器包含一个存储锁定状态的内部缓存。您可以以声明性方式或以编程方式配置内部缓存。

流程

  1. 定义集群中存储集群锁定状态的节点数量。默认值为 -1,它将值复制到所有节点。
  2. 为缓存可靠性指定以下值之一,它控制集群锁定在集群分割到分区或多个节点离开时的行为方式:

    • AVAILABLE: 任何分区中的节点都可以同时在锁定时操作。
    • CONSISTENT :只有属于大多数分区的节点才能在锁定上运行。这是默认值。
    • 编程配置

      import org.infinispan.lock.configuration.ClusteredLockManagerConfiguration;
      import org.infinispan.lock.configuration.ClusteredLockManagerConfigurationBuilder;
      import org.infinispan.lock.configuration.Reliability;
      ...
      
      GlobalConfigurationBuilder global = GlobalConfigurationBuilder.defaultClusteredBuilder();
      
      final ClusteredLockManagerConfiguration config = global.addModule(ClusteredLockManagerConfigurationBuilder.class).numOwner(2).reliability(Reliability.AVAILABLE).create();
      
      DefaultCacheManager cm = new DefaultCacheManager(global.build());
      
      ClusteredLockManager clm1 = EmbeddedClusteredLockManagerFactory.from(cm);
      
      clm1.defineLock("lock");
    • 声明性配置

      <?xml version="1.0" encoding="UTF-8"?>
      <infinispan
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="urn:infinispan:config:12.1 https://infinispan.org/schemas/infinispan-config-12.1.xsd"
              xmlns="urn:infinispan:config:12.1">
      
          <cache-container default-cache="default">
              <transport/>
              <local-cache name="default">
                  <locking concurrency-level="100" acquire-timeout="1000"/>
              </local-cache>
              <clustered-locks xmlns="urn:infinispan:config:clustered-locks:12.1"
                               num-owners = "3"
                               reliability="AVAILABLE">
                  <clustered-lock name="lock1" />
                  <clustered-lock name="lock2" />
              </clustered-locks>
          </cache-container>
          <!-- Cache configuration goes here. -->
      </infinispan>