Laravel queues not working

后端 未结 9 1013
梦谈多话
梦谈多话 2020-12-31 01:02

I am using laravel queues for commenting on the facebook post. When ever i recieve data from facebook webhook, based on the recieved details i am commenting on the post. To

9条回答
  •  隐瞒了意图╮
    2020-12-31 01:25

    The accepted answer was a problem for me, but I also wound up on this question for 2 other similar problems which I solved, and maybe they will help other people that wind up here.

    Other problem 1: job creation (constructor) works, but job handler does not fire - ever.

    • the ever is key here because, typically, if none of them ever fire, then it could be because your job code is modified and your queue should be restarted.

    Other problem 2: job creation (constructor) works, but job handler does not fire - sometimes.

    • when sometimes is true for you, then it may be that your jobs that are not firing are because they are happening while in a transaction, like a DB::beginTransaction.

    Assuming I want the job to fire even during a transaction, I can do this:

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($errorInfo)
    {
        $this->errorInfo = $errorInfo;
    
        // Queues won't run the handlers during transactions
        // so, detect the level, and if it is not 0, rollback to force job handling
        if (\DB::transactionLevel() != 0) {
            \DB::rollBack();
        }
    }
    

    BUT DON'T DO THIS unless you want to fire your job and force rollback. My situation is unique in that my job sends emails on FATAL errors, so I want it to fire because I have an error breaking the process anyway (rollback going to happen and is unplanned due to uncaught error).

    Here's a situation when you wouldn't want to do this:

    • your job sends an email to a user when payment is successful
    • your payment could be successful, could not be
    • depending on successful payment, you rollback or commit

    You should structure your dispatch to happen AFTER you rollback or commit. I did not have that luxury for my job because it happens when I cannot predict (a FATAL error). But if you have control over it, like knowing your payment is successful, dispatch after you have committed, or exited all levels of transactions!

    I am not sure of the behavior of triggering a job while in the transaction, and then rolling back or committing. It could be worked around if it didn't work properly by adding a delay, but that seems unreliable (guessing at how long to wait) unless it was a significant delay.

提交回复
热议问题