第 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_NODESData Grid 使用集群 executors 在节点间运行脚本。例如,需要在单个节点上执行调用流处理的服务器任务,因为流处理被分发到所有节点。
-
call()-
计算结果。此方法在
java.util.concurrent.Callable接口中定义,并通过服务器任务调用。
重要
服务器任务实施必须遵循服务加载程序模式要求。例如,实施必须具有零参数构造器。
以下 HelloTask 类实现提供了一个示例任务,它有一个参数:
8.1.2. 在 Data Grid 服务器中部署服务器任务 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
将自定义服务器任务类添加到 Data Grid 服务器。
前提条件
停止任何正在运行的 Data Grid 服务器。Data Grid 不支持自定义类的运行时部署。
流程
- 将服务器任务实施打包在 JAR 文件中。
添加
META-INF/services/org.infinispan.tasks.ServerTask文件,其中包含服务器任务的完全限定域名,例如:example.HelloTask
example.HelloTaskCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 JAR 文件复制到 Data Grid 服务器的
$RHDG_HOME/server/lib目录中。 - 将您的类添加到 Data Grid 配置中的 deserialization whitelist 中。或者,使用系统属性设置白名单。