php artisan make:job <JobClassName>
QUEUE_CONNECTION=database
use IlluminateSupportFacadesRedis;
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Redis::throttle('key')->block(0)->allow(1)->every(5)->then(function () {
info('Lock obtained...');
// Handle job...
}, function () {
// Could not obtain lock...
return $this->release(5);
});
}
class CreateJobsTable extends Migration{
// this method will create a database called jobs with its respective columns
public function up(){
Schema::create('jobs', function (Blueprint $table) { //we define our database columns here
$table->bigIncrements('id');
$table->string('queue')->index();
$table->longText('payload');
$table->unsignedTinyInteger('attempts');
$table->unsignedInteger('reserved_at')->nullable();
$table->unsignedInteger('available_at');
$table->unsignedInteger('created_at');
});
}
// this method is used to check if the table already exists
public function down(){
Schema::dropIfExists('jobs');
}
}
$user->notify((new InvoicePaid($invoice))->delay([
'mail' => now()->addMinutes(5),
'sms' => now()->addMinutes(10),
]));
class TestQueueEmails extends Controller
{
/**
* test email queues
**/
public function sendTestEmails()
{
$emailJobs = new TestSendEmail();
$this->dispatch($emailJobs);
}
}
Route::get('sending-queue-emails', [TestQueueEmails::class,'sendTestEmails']);