Jboss Infinispan故障切换功能

Jboss Infinispan故障切换功能,jboss,failover,infinispan,Jboss,Failover,Infinispan,我试图利用Infinispan的分布式任务故障切换,但似乎无法使其正常工作。关于我正在尝试做的事情的一点背景: 我在集群中有两个服务器节点。这两个节点共享一个分布式缓存,该缓存包含用于运行任务的信息。我正在尝试在它们上实现故障切换功能,这样,如果一个任务在服务器1上运行,并且它发生故障,那么服务器2将能够拾取该任务并完成它 1) 我首先创建一个DistributedCallable对象: (MyJob)MyJob MyJob=newmyjob(param1,param2) 2) 然后创建Dist

我试图利用Infinispan的分布式任务故障切换,但似乎无法使其正常工作。关于我正在尝试做的事情的一点背景:

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

1) 我首先创建一个DistributedCallable对象:
(MyJob)MyJob MyJob=newmyjob(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);
DistributedExecutorService执行服务=
新的DefaultExecutorService(cacheManager.getCache());
DistributedTaskBuilder任务生成器=
createDistributedTaskBuilder(myJob);
taskBuilder=taskBuilder.failoverPolicy(DefaultExecutorService.RANDOM\u NODE\u故障转移);
3) 我构建distributedtask,然后使用DistributedExecutorService运行它:

DistributedTask<Boolean> distTask = taskBuilder.build();
execService.submit(distTask);
DistributedTask 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();

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

我将其设置为等待结果。我设置了一个场景,在该场景中,如果任务在非发起方节点上运行,则非发起方节点将抛出异常。发起方节点确实从另一个节点捕获分布式任务引发的异常,但它仍然不会重新运行该任务。