请分享您的看法,参加2024年Clojure调查!

欢迎!请参阅关于页面了解有关如何使用的更多信息。

0
Clojure

在Ruby on Rails中,它们有ActiveJob来实施后台任务。示例包括delayed_jobresque等。

Clojure有类似的东西吗?

基本上,我想创建一个REST端点调用,这个调用将一个长时间运行的任务入队执行。尽管它立即返回一个类似作业ID的内容,但不需要等待任务完成。该任务应继续在后台运行,直到完成。

2 答案

+1

被选中
 
最佳答案

有一个叫做Proletarian的工具,它正是为delayed_job和Resque支持的用例而创建的。但是,它没有REST接口 - 你通过调用写入作业表的功能来入队作业。它是基于Postgres的,并且可以参与你已经使用的Postgres事务。这为你提供了HTTP或Redis解决方案所不能保证的保证,即作业是原子性地与其持久化在事务中保存在一起的其他业务数据持久化。

谢谢,看起来很有希望。在我的场景中我使用Postgres。
0

嗨Edward:
您可以了解一下nilenso/goose,这是一个可靠的并且可扩展的Clojure后台作业处理库;它处理作业失败,并支持计划、cron和批量作业。

Goose直接支持Redis和RabbitMQ消息代理。如果用户需要不同的代理,例如AWS SQS或Postgres,Goose也提供插件自定义代理的设置。

请注意,Goose作业不能通过API端点创建,但是可以通过类似RoR的ActiveJobs的函数调用。
尽管如此,我喜欢您的想法。API调用是一个可行的功能,但在参数数据类型上有一些限制。

我在Goose中创建了一个问题#144,以实现从HTTP端点创建作业。感谢您的想法,Edward!

...