第 8 章 远程执行服务器侧任务


定义并添加可从 Data Grid 命令行界面、REST API 或 Hot Rod 客户端调用的 Data Grid 服务器的任务。

您可以将任务实施为自定义 Java 类,也可以使用 JavaScript 等语言定义脚本。

8.1. 创建服务器任务

创建自定义任务实施,并将它们添加到 Data Grid 服务器中。

8.1.1. 服务器任务

Data Grid 服务器任务是扩展 org.infinispan.tasks.ServerTask 接口且通常包括以下方法调用的类:

setTaskContext()
允许访问执行上下文信息,包括任务参数、对执行任务的缓存引用,等等。在大多数情况下,实施将此信息存储在本地,并在实际执行任务时使用这些信息。
getName()
返回任务的唯一名称。客户端使用这些名称调用任务。
getExecutionMode()

返回任务的执行模式。

  • TaskExecutionMode.ONE_NODE 仅处理请求的节点执行该脚本。虽然脚本仍然可以调用集群操作。
  • TaskExecutionMode.ALL_NODES Data Grid 使用集群 executors 在节点间运行脚本。例如,需要在单个节点上执行调用流处理的服务器任务,因为流处理被分发到所有节点。
call()
计算结果。此方法在 java.util.concurrent.Callable 接口中定义,并通过服务器任务调用。
重要

服务器任务实施必须遵循服务加载程序模式要求。例如,实施必须具有零参数构造器。

以下 HelloTask 类实现提供了一个示例任务,它有一个参数:

package example;

import org.infinispan.tasks.ServerTask;
import org.infinispan.tasks.TaskContext;

public class HelloTask implements ServerTask<String> {

   private TaskContext ctx;

   @Override
   public void setTaskContext(TaskContext ctx) {
      this.ctx = ctx;
   }

   @Override
   public String call() throws Exception {
      String name = (String) ctx.getParameters().get().get("name");
      return "Hello " + name;
   }

   @Override
   public String getName() {
      return "hello-task";
   }

}
Copy to Clipboard Toggle word wrap

8.1.2. 在 Data Grid 服务器中部署服务器任务

将自定义服务器任务类添加到 Data Grid 服务器。

前提条件

停止任何正在运行的 Data Grid 服务器。Data Grid 不支持自定义类的运行时部署。

流程

  1. 将服务器任务实施打包在 JAR 文件中。
  2. 添加 META-INF/services/org.infinispan.tasks.ServerTask 文件,其中包含服务器任务的完全限定域名,例如:

    example.HelloTask
    Copy to Clipboard Toggle word wrap
  3. 将 JAR 文件复制到 Data Grid 服务器的 $RHDG_HOME/server/lib 目录中。
  4. 将您的类添加到 Data Grid 配置中的 deserialization whitelist 中。或者,使用系统属性设置白名单。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat