- 9.3.2. 任务
9.3.2. 任务
Redisson独立节点不要求任务的类在类路径里。他们会自动被Redisson独立节点的ClassLoader加载。因此每次执行一个新任务时,不需要重启Redisson独立节点。
采用Callable任务的范例:
public class CallableTask implements Callable<Long> {@RInjectprivate RedissonClient redissonClient;@Overridepublic Long call() throws Exception {RMap<String, Integer> map = redissonClient.getMap("myMap");Long result = 0;for (Integer value : map.values()) {result += value;}return result;}}
采用Runnable任务的范例:
public class RunnableTask implements Runnable {@RInjectprivate RedissonClient redissonClient;private long param;public RunnableTask() {}public RunnableTask(long param) {this.param = param;}@Overridepublic void run() {RAtomicLong atomic = redissonClient.getAtomicLong("myAtomic");atomic.addAndGet(param);}}
在创建ExecutorService时可以配置以下参数:
ExecutorOptions options = ExecutorOptions.defaults()// 指定重新尝试执行任务的时间间隔。// ExecutorService的工作节点将等待10分钟后重新尝试执行任务//// 设定为0则不进行重试//// 默认值为5分钟options.taskRetryInterval(10, TimeUnit.MINUTES);
RExecutorService executorService = redisson.getExecutorService("myExecutor", options);executorService.submit(new RunnableTask(123));RExecutorService executorService = redisson.getExecutorService("myExecutor", options);Future<Long> future = executorService.submit(new CallableTask());Long result = future.get();
使用Lambda任务的范例:
RExecutorService executorService = redisson.getExecutorService("myExecutor", options);Future<Long> future = executorService.submit((Callable & Serializable)() -> {System.out.println("task has been executed!");});Long result = future.get();
可以通过@RInject注解来为任务实时注入Redisson实例依赖。
