使用 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 集成来为自己编写东西是一些答案,但这不是一个好的答案。回答:在那种情况下不应该接受这样的事情。 我没有把他引向那个方向。他特意询问了 SII 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;
ThreadPoolTaskExecutor 在投入使用之前需要设置属性。 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 的队列?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用密码保护我的 /sidekiq 路由(即需要对 Sidekiq::Web 工具进行身份验证)?