LaravelHaystack是一个包,用于漂亮的简单但强大的数据库驱动的工作链。下面是一个可用的概述, 取自软件包的readme:
$haystack = Haystack::build()
->withName('Podcast Chain')
->addJob(new RecordPodcast)
->addJob(new ProcessPodcast)
->addJob(new PublishPodcast)
->then(function () {
// Haystack completed
})
->catch(function () {
// Haystack failed
})
->finally(function () {
// Always run either on success or fail.
})
->paused(function () {
// Run if the haystack is paused
})
->withMiddleware([
// Middleware to apply on every job
])
->withDelay(60) // Add a delay to every job
->dispatch();
有了这个包, 你可以将工作链存储在数据库中, 这有助于降低内存消耗, 并支持所有Laravel的队列类型.其他的一些主要功能包括:
- 低内存消耗,因为一次只处理一个作业,而且作业链被存储在数据库中
- 你可以延迟/释放作业,只要你想,因为它将使用调度器重新启动一个链。即使你的队列驱动是SQS!
- 它提供了回调方法,如
then,catch和finally - 全局中间件,可以应用于链上的每一个作业
- 可以为链上的每个作业添加延迟
- 你可以存储和检索数据/状态,这些数据/状态可以被链上的每个作业访问。
- 你可以存储模型以便以后处理。
你可以做一些非常酷的事情, 比如如果你的作业链调用API并遇到速率限制时, 可以暂停干草堆。虽然Laravel有作业链, 但我认为你应该考虑这个包来处理分批作业.看看readme,看看这个包与内置链能力的区别的全部细节。