使用 java 工具的类似 Sidekiq 的队列?

Posted

技术标签:

【中文标题】使用 java 工具的类似 Sidekiq 的队列?【英文标题】:Sidekiq-like queue using java tools? 【发布时间】:2014-09-06 02:16:03 【问题描述】:

我想要一个工作队列,其行为几乎与 ruby​​ 的 sidekiq 完全相同(它不需要 使用 Redis,但它可以 - 我只是不能使用 ruby​​ - 甚至 Jruby 都不需要) .基本上我希望能够创建使用某些参数运行的作业,并且工作池执行这些作业。工作人员会使用hibernate来做一些工作,所以我认为Spring集成可以让事情变得更容易。

【问题讨论】:

【参考方案1】:

Spring Integration 有Redis Queue inbound and outbound channel adapters。

入站消息驱动适配器当前不支持并发;我们将worked around that in Spring XD 与包含RedisQueueMessageDrivenEndpoint 集合的复合适配器一起使用。

或者你可以使用 RabbitMQ;它的 Spring Integration 适配器确实支持并发。

编辑

总线被提取到sub project within that repo。

【讨论】:

Sidekiq 是一个完整的框架,提供了很多开箱即用的功能,我不认为指向 spring 集成来为自己编写东西是一些答案,但这不是一个好的答案。回答:在那种情况下不应该接受这样的事情。 我没有把他引向那个方向。他特意询问了 SI I think that Spring integration could make things easier. 阅读标题。 I just can't use ruby 好的,但仍然觉得回答:“我想要一个行为几乎与 ruby​​ 的 sidekiq 完全相同的工作队列”与使用这个库自己实现它并不完全相同。 :-) @GaryRussell 与您在 Spring XD 中的 RedisMessageBus 实现的链接现在已失效。我很想看到这段代码,因为我正在寻求实现一个 Java Sidekiq 工作程序,当我们将大部分服务迁移到 Java 时,它可以与我们的 Ruby 工作程序一起工作。我在github.com/spring-projects/spring-xd/tree/master/spring-xd-dirt/… 中闲逛时没有看到它是否已被弃用?【参考方案2】:

Spring 框架有ThreadPoolTaskExecutor。你可以在你的课堂上使用它,如下所示。

@Autowired
ThreadPoolTaskExecutor executor;

ThreadPoolTask​​Executor 在投入使用之前需要设置属性。 PostConstruct 会在依赖注入之后执行,所以我们可以在那里设置 ThreadPoolExecutor 的属性。

@PostConstruct
public void init() 
    executor.setCorePoolSize(5); 
    executor.setMaxPoolSize(10);
    executor.setQueueCapacity(25);

然后就可以开始使用executor了

executor.execute(new EmailtoCustomerTask("zhw@gmail.com"));

成为任务所需的唯一要求是实现 Runnable 接口。

private class EmailtoCustomerTask implements Runnable

【讨论】:

以上是关于使用 java 工具的类似 Sidekiq 的队列?的主要内容,如果未能解决你的问题,请参考以下文章

ruby 清理特定sidekiq队列中的作业

ruby Sidekiq共享队列统计信息

ruby sidekiq队列

如何使用密码保护我的 /sidekiq 路由(即需要对 Sidekiq::Web 工具进行身份验证)?

在多线程 Rails 环境中使用 Redis 的最佳方式是啥? (彪马/Sidekiq)

Sidekiq 工作人员正在泄漏内存