2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面了解有关此工作的更多信息。

0
Clojure

在Ruby on Rails中,他们有用于实现后台任务的ActiveJob。例如delayed_jobresque等。

Clojure中有类似的东西吗?

基本上,我想实现一个REST端点调用,该调用将长运行任务排队运行。虽然它返回一个类似作业标识符的东西,但不需要等待任务完成。任务应在后台持续运行,直到完成。

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也提供了插件自定义代理的方式。

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

我在Goose中创建了一个问题#144以启用从HTTP端点创建作业。感谢你的建议,Edward!

...