apache ignite服务部署群集单例

时间:2018-07-09 10:18:06

标签: ignite

我尝试创建内部带有apache ignite的spring java应用程序。

应用程序启动时,它将服务(集群单例)部署到集群。 (可以)

但是当我启动第二个部署该服务的节点时,它也被锁定。

为什么会这样? Apache Ignite 2.5.0

服务等级代码:

public class TaskLockWatcher implements Service {
    @IgniteInstanceResource
    private Ignite ignite;
    private SchedulerFuture scheduler;

    @Override
    public void cancel(ServiceContext ctx) {
      LOGGER.info("schedule service cancel");
      if (scheduler != null){
        scheduler.cancel();
      }
    }

    @Override
    public void init(ServiceContext ctx) throws Exception {
      LOGGER.info("schedule service init");
    }

    @Override
    public void execute(ServiceContext ctx) throws Exception {
      LOGGER.info("schedule service execute");
      scheduler = ignite.scheduler().scheduleLocal(() -> {
        LOGGER.info("schedule service call");
        List<Ticket> tickets = getTicketForUnlock();
        if (!tickets.isEmpty()){
          changeTicketStatus(tickets, TicketStatus.CREATED);
        }
      }, "* * * * *");
    }
  }

但是即使我在所有TaskLockWatcher方法中仅保留消息的输出,也会发生锁定。

发布代码:

Ignite ignite = connector.getClient();
IgniteServices svcs = ignite.services();
svcs.deployClusterSingleton("taskLockWatcher", new TaskLockWatcher());

点燃配置代码:

IgniteConfiguration igniteConfiguration = new IgniteConfiguration();
DataStorageConfiguration dataStorageConfiguration = new DataStorageConfiguration();
dataStorageConfiguration.setWalMode(WALMode.LOG_ONLY);
dataStorageConfiguration.getDefaultDataRegionConfiguration().setPersistenceEnabled(false);
dataStorageConfiguration.getDefaultDataRegionConfiguration().setMaxSize(128); // MB

List<DataRegionConfiguration> list = new ArrayList<>();
    DataRegionConfiguration configuration = new DataRegionConfiguration();
    configuration.setName("TASK_REGION");
    configuration.setMaxSize(1024);
    configuration.setPersistenceEnabled(true);
    list.add(conf); 
    dataStorageConfiguration.setDataRegionConfigurations(list.toArray(new DataRegionConfiguration[0]));
    igniteConfiguration.setDataStorageConfiguration(dataStorageConfiguration);

TcpCommunicationSpi tcpCommunicationSpi = new TcpCommunicationSpi();
    tcpCommunicationSpi.setSlowClientQueueLimit(1000);
    igniteConfiguration.setCommunicationSpi(tcpCommunicationSpi);
    Map<String, String> attrs = Collections.singletonMap("group.node.filter", "CLUSTER_TASKS,CLUSTER_TICKETS");
    igniteConfiguration.setUserAttributes(attrs);

TcpDiscoverySpi spi = new TcpDiscoverySpi();
    TcpDiscoveryZookeeperIpFinder ipFinder = new TcpDiscoveryZookeeperIpFinder();
    ipFinder.setBasePath("/datagrid");
    ipFinder.setCurator(getCuratorFramework());
    spi.setIpFinder(ipFinder);
    igniteConfiguration.setDiscoverySpi(spi);

AtomicConfiguration atomicConfiguration = new AtomicConfiguration();
    atomicConfiguration.setBackups(1);
    atomicConfiguration.setCacheMode(CacheMode.REPLICATED);
    igniteConfiguration.setAtomicConfiguration(atomicConfiguration);
    igniteConfiguration.setIncludeEventTypes(EventType.EVTS_CACHE);

CacheConfiguration<UUID, Ticket> cacheConfiguration = new CacheConfiguration<>("TICKETS");
    cacheConfiguration.setIndexedTypes(keyClass, UUID.class);
    cacheConfiguration.setNodeFilter((ClusterNode clusterNode) -> {
          String dataNode = clusterNode.attribute("group.node.filter");
          return dataNode != null && dataNode.contains("CLUSTER_TICKETS");
        });
    cacheConfiguration.setStatisticsEnabled(true);
    cacheConfiguration.setDataRegionName("TASK_REGION");
    cacheConfiguration.setBackups(1);
    cacheConfiguration.setCacheMode(CacheMode.PARTITIONED);
    cacheConfiguration.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
    IgniteCache<UUID, Ticket> ticketCache = ignite.getOrCreateCache(cacheConfiguration);

0 个答案:

没有答案
相关问题