Java中类似于Python的Celery项目的是什么?

47

我正在寻找Java环境下类似于Celery项目的替代方案,我已经看过了Spring Batch,但是否有更好的分布式任务队列的选择呢?

谢谢。


实际上这是一个重复的问题:https://dev59.com/aWkw5IYBdhLWcg3w4emS(但是这个重复问题现在有更好的答案...) - fnl
9个回答

40
What Celery is doing is very much akin to EIP, and SEDA with convenient task scheduling... (all you have left to do is add some DB, and async HTTP networking and you have got a complete enterprise quality stack).
Basically in Java there is the Spring way, the Java EE way, and the Hadoop way:
- Spring: Spring Integration + Spring Batch + RabbitMQ - Java EE: Mule + Quartz or EJB Scheduling + HornetMQ - Hadoop: Capacity + ZooKeeper Those are roughly in order of ease of setting up.

12
Jesque (https://github.com/gresrun/jesque) 是一个Java分布式任务队列库。它是Resque库(https://github.com/defunkt/resque)的Java移植版。在其GitHub页面上,Resque库被描述为:“Resque(pronounced like "rescue" )是一个基于Redis的库,用于创建后台作业,将这些作业放置在多个队列中,并稍后处理它们。”

5

3
Quartz调度器是否可以进行按需作业执行,而不是按特定计划执行作业? - Zakiullah Khan
@ZakiullahKhanMohamed 我非常晚了,但是是的,这是可能的。您可以安排一个作业立即运行。 - GuiSim
2
提醒一下:开源的“免费”版本没有任何分发支持。Terracotta声称企业版有此功能。 - Adam Marcionek
@AdamMarcionek 不确定你的意思是什么。我只看到Apache许可证,我认为这意味着即使你使用石英,你基本上可以自由分发你的软件。 - dtc
1
@dtc 不是代码的分发,而是任务的分配,这被锁在企业版后面。是的,就像你所说的,这与OP不同。 - Adam Marcionek
显示剩余2条评论

3

3

Celery主要基于Erlang/RabbitMQ。RabbitMQ有一个Java客户端库,可能会很有用。此外,还有一个名为octobot的工具,它有一个RabbitMQ后端。


如果我没错的话,Celery主要是用Python编写的,而不是Erlang。我同意RabbitMQ是基于Erlang的这一观点。看了Octobot,谢谢。 - Zakiullah Khan
1
我认为他的意思是RabbitMQ是用Erlang编写的,因此您需要安装它才能使用。 - fabspro

3

我发现Java世界中的JobRunr与Python世界中的Celery非常相似。这是一个用于Java后台处理的库,分布式部署,并采用持久化存储。

从他们的文档中可以看出:

使用Java 8 lambda表达式在Java应用程序内执行快速和延迟的、定时的和周期性的Job非常容易。支持CPU和I/O密集型、长时间和短时间的任务。数据持久化可以通过RDBMS(例如Postgres、MariaDB/MySQL、Oracle、SQL Server、DB2和SQLite)或NoSQL(ElasticSearch、MongoDB和Redis)来完成。


0

我找到的最接近的东西是Octobot: https://github.com/cscotta/Octobot,但是文档不是很多...以前有一个octobot.taco.cat的网站,但是我最近没有看到它加载。我个人没有使用过Octobot,但我经常看到它被推荐作为Java的Celery。


0

我一直没有找到在Java中使用起来像Celery一样容易的东西。大多数解决方案建议使用消息队列,但Celery比队列抽象层次更高。你可以从任务、工作人员、结果、重试等角度思考,而不是消息和消费者。

我还需要实现一些桥接器,为同时使用Java和Python的公司编写代码,于是我启动了这个项目:

celery-java - Java版的Celery客户端和工作程序,与它们的Python版本兼容。

注意,目前它还非常不成熟。


-6

Apache ActiveMQ http://activemq.apache.org/

Apache Kafka http://kafka.apache.org/

Apache ActiveMQ是一个流行的开源消息代理,它支持多种协议和编程语言。它提供了可靠的异步通信机制,使得分布式系统之间的通信变得更加容易。

Apache Kafka是另一个流行的开源消息代理,它专注于高吞吐量和低延迟的数据传输。它被广泛用于大规模数据处理和实时流处理应用程序。


5
我认为ActiveMQ和Kafta不像Celery一样是Worker/Task Queue。它们是消息代理,如果你这么说的话,可以将它们与RabbitMQ进行比较。 - Rupesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接