LaravelHaystack包:用于数据库驱动的工作链

78 阅读1分钟

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,catchfinally
  • 全局中间件,可以应用于链上的每一个作业
  • 可以为链上的每个作业添加延迟
  • 你可以存储和检索数据/状态,这些数据/状态可以被链上的每个作业访问。
  • 你可以存储模型以便以后处理。

你可以做一些非常酷的事情, 比如如果你的作业链调用API并遇到速率限制时, 可以暂停干草堆。虽然Laravel有作业链, 但我认为你应该考虑这个包来处理分批作业.看看readme,看看这个包与内置链能力的区别的全部细节。