基于Jesque封装的springboot starter,使用注解的方式方便使用。
- pom
<dependencies>
<dependency>
<groupId>io.patamon.jesque</groupId>
<artifactId>spring-boot-starter-jesque</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>patamon.release.repository</id>
<name>github release repository</name>
<url>https://raw.github.com/icemimosa/maven/release/</url>
</repository>
</repositories>
- Configuration (可以参照spring-data-redis)
spring:
redis:
host: 127.0.0.1
port: 6379
- 新建一个任务(队列)类型
/**
* Desc: 队列任务类型常量
*
* 也可在其他地方声明, 这里作为测试. 随意...
*/
public class JesqueType {
/**
* 测试JOB队列类型
*/
public static final String JOB_TEST_TYPE = "JOB_TEST";
}
- Producer example
/**
* Desc: 队列任务生产者例子
*
* [使用方式]: 使用 {@link JobClient} 接口的方法进行任务的提交
*/
@Slf4j
@RestController
@RequestMapping("/api/common/test/job")
public class DemoProvider {
@Autowired
private JobClient jobClient;
@RequestMapping(value = "/{itemId}", method = RequestMethod.GET)
public void test(@PathVariable Long itemId) {
log.info("[Jesque Start]");
for (int i = 1; i <= 10; i++) {
jobClient.submit(itemId + "" + i, JesqueType.JOB_TEST_TYPE, i * 1000);
}
log.info("[Jesque End]");
}
@RequestMapping(value = "/now/{itemId}", method = RequestMethod.GET)
public void testNow(@PathVariable Long itemId) {
log.info("[Jesque Start]");
jobClient.submit(itemId + "", JesqueType.JOB_TEST_TYPE);
log.info("[Jesque End]");
}
}
/**
* Desc: 队列任务消费者例子
*
* [使用方式]:
* 1. 声明一个类, 用 {@link JobConsumer} 修饰
* 2. 定义一个public方法, 用 {@link JobType} 修饰, 并传入任务类型常量, 如 {@link JesqueType}
* 3. 方法需要给定一个String类型参数, 这个参数就是Provider提供的业务ID
*
* [注意]:
* 需要注意的是, 同一个 {@link JobType} 的多个会被多次执行. 这里的消费方法与队列的消费者有本质的区别.
* 队列消费者只会有一个抢到任务并消费, 这里针对部署了多份服务(多个JVM)
* 方法消费是指在一个服务中声明了多个相同的 {@link JobType}, 所以每个方法都会被执行, 而不是原则上的多次消费.
*
*/
@Slf4j
@JobConsumer
public class DemoConsumer {
@JobType(JesqueType.JOB_TEST_TYPE)
public void consume(String itemId) {
log.info("JOB_TEST consume {}", itemId);
}
@JobType(JesqueType.JOB_TEST_TYPE)
public void consume2(String itemId) {
log.info("JOB_TEST consume2 {}", itemId);
}
}
- 2018-09
- Jesque因为redis服务挂掉, 而导致worker线程挂掉. 目前使用自检测重启的方式解决.
- 2019-04
- Jesque2.1.3修复了之前的问题