Java 中通过 Redis 实现分布式任务调度和执行

2,346 阅读1分钟
原文链接: coyee.com

它也可以通过一个Redisson实例在主要应用中跨多个进程。

所有任务类都是动态加载的,所以你不需要将他们在放在Redisson节点的路径中并重新启动任务类的变化。

任务定义

一个任务应该实现 java.util.concurrent.Callable或java.lang.Runnable interface接口。

Here is an example using Callable interface:

下面是一个Callable接口实现的示例:

public class CallableTask implements Callable {

    @RInject
    private RedissonClient redissonClient;

    private long anyParam;

    public CallableTask() {
    }

    public CallableTask(long anyParam) {
        this.anyParam = anyParam;
    }

    @Override
    public Long call() throws Exception {
        // ...
    }

}

下面是Runnable 接口实现:

public class RunnableTask implements Runnable {

    @RInject
    private RedissonClient redissonClient;

    private long anyParam;

    public RunnableTask() {
    }

    public RunnableTask(long anyParam) {
        this.anyParam = anyParam;
    }

    @Override
    public void run() {
        // ...
    }

}

任务能够通过构造器赋予参数。一个被提交的任务能够通过@RInject注释访问Redisson实例。这里提供了对所有Redisson功能的任务访问:Redis 基于 Maps, Multimaps, Sets, Lists, Queues, Locks, Semaphores, PublishSubscribe,和许多其他的 objects, collections, locks, and services