Queued Event Listeners Code:
<?php
namespace AppListenersTest;
use AppEventsTestRollEvent;
use IlluminateContractsQueueShouldBeUnique;
use IlluminateContractsQueueShouldQueue;
use IlluminateQueueInteractsWithQueue;
class CapterBEventListener implements ShouldQueue, ShouldBeUnique
{
use InteractsWithQueue;
public $uniqueFor = 3600;
public function handle(RollEvent $event)
{
echo 'RoolEventB' ,PHP_EOL;
sleep(10);
echo 'over--',PHP_EOL;
}
public function uniqid(RollEvent $event)
{
return 5;
}
}
Test in tinker:
$ php artisan queue:restart
for($i = 0; $i < 2; $i++) event(new AppEventsTestRollEvent(5))
Execution results are not unique:
> [2022-04-30 18:29:17][VlGCdjmgniuAKbFuJ6QL7t7jLuhxzEN6] Processing: AppListenersTestCapterBEventListener
> RoolEventB
> over--
> [2022-04-30 18:29:27][VlGCdjmgniuAKbFuJ6QL7t7jLuhxzEN6] Processed: AppListenersTestCapterBEventListener
> [2022-04-30 18:29:27][uh4p7EuDmVSVEf17SrbcoUdKNQ1xVKzo] Processing: AppListenersTestCapterBEventListener
> RoolEventB
> over--
> [2022-04-30 18:29:37][uh4p7EuDmVSVEf17SrbcoUdKNQ1xVKzo] Processed: AppListenersTestCapterBEventListener
Used ShouldBeUnique in unique-jobs:
<?php
namespace AppJobs;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldBeUnique;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
class TestPodcast implements ShouldQueue, ShouldBeUnique
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function handle()
{
echo 'handle start', PHP_EOL;
sleep(10);
echo 'handle end', PHP_EOL;
}
public function uniqueId()
{
return 5;
}
}
Test in tinker:
for($i = 0; $i < 2; $i++) AppJobsTestPodcast::dispatch();
Execution result is unique:
> [2022-05-01 10:47:30][jaEFh5PeZGVeVsDRVKD3qok5LiQ7E7ub] Processing: AppJobsTestPodcast
> handle start
> handle end
> [2022-05-01 10:47:30][jaEFh5PeZGVeVsDRVKD3qok5LiQ7E7ub] Processed: AppJobsTestPodcast