无限跨故障转移功能



我正在尝试利用Infinispan的分布式任务故障转移,但我似乎无法让它工作。关于我正在尝试做的事情的一些背景:

我在群集中有两个服务器节点。这两个节点共享一个分布式缓存,该缓存包含用于运行任务的信息。我正在尝试在它们上实现故障转移功能,以便如果任务在服务器 #1 上运行并且它出现故障,服务器 #2 将能够拾取任务并完成它。

1)我首先创建一个分布式可调用对象: (MyJob) MyJob myJob = new MyJob(param1, param2);

2)然后我创建一个DistributedExecutorService和一个DistributedTaskBuilder,并使用提供的Infinispan随机节点故障转移策略对其进行配置:

DistributedExecutorService execService =
        new DefaultExecutorService(cacheManager.getCache());
DistributedTaskBuilder<Boolean> taskBuilder = 
        execService.createDistributedTaskBuilder(myJob);
taskBuilder = taskBuilder.failoverPolicy(DefaultExecutorService.RANDOM_NODE_FAILOVER);

3)我构建了分布式任务,然后使用分布式执行器服务运行它:

DistributedTask<Boolean> distTask = taskBuilder.build();
execService.submit(distTask);

在我的测试中,我确实看到 DistributedTask 被发送到服务器 #1 或服务器 #2,并且两台服务器都正确更新了分布式缓存。但是,当我尝试测试故障转移时,它似乎不起作用。

例如:当任务在服务器 #1 上运行时(我将任务设置为睡眠约 ~20 秒),我杀死了服务器 #1,但我没有看到服务器 #2 重新运行或选取任务。反之亦然。

不确定我是否遗漏了什么,我已经根据 Infinispan 7.0.x 用户指南完成了此操作。为了使故障转移正常工作,我是否需要使用提供的服务器模块之一(Hot Rod/Memcached/REST Server/WebSocket Server)?我正在其嵌入式模式下使用 Infinispan(在实际应用程序中),文档似乎使用分布式执行框架应该提供故障转移。

任何帮助将不胜感激!

似乎为了应用故障转移策略,您需要等待此类任务的结果:

DistributedTask distTask = taskBuilder.build();
Future future = execService.submit(distTask);
Object ignoredReturnValue = future.get();

缺点是,如果发起方节点(您调用此代码的位置)崩溃,则无法应用故障转移策略。

最新更新