【发布时间】:2014-11-27 01:42:26
【问题描述】:
我正在尝试利用 Infinispan 的分布式任务故障转移,但我似乎无法让它工作。关于我正在尝试做的事情的一点背景:
我在一个集群中有两个服务器节点。这两个节点共享一个分布式缓存,缓存包含用于运行任务的信息。我正在尝试在它们上实现故障转移功能,以便如果任务在服务器 #1 上运行并且它出现故障,服务器 #2 将能够接收并完成任务。
1) 我首先创建了一个 DistributedCallable 对象:
(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) 我构建了分布式任务,然后使用 DistributedExecutorService 运行它:
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,并且文档看起来使用分布式执行框架应该提供故障转移。
任何帮助将不胜感激!
【问题讨论】:
标签: jboss failover infinispan