Daniel Supernault 1 год назад
Родитель
Сommit
b2c9cc2318
1 измененных файлов с 34 добавлено и 1 удалено
  1. 34 1
      app/Jobs/ProfilePipeline/IncrementPostCount.php

+ 34 - 1
app/Jobs/ProfilePipeline/IncrementPostCount.php

@@ -8,16 +8,48 @@ use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Foundation\Bus\Dispatchable;
 use Illuminate\Foundation\Bus\Dispatchable;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Queue\SerializesModels;
 use Illuminate\Queue\SerializesModels;
+use Illuminate\Queue\Middleware\WithoutOverlapping;
+use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;
 use App\Profile;
 use App\Profile;
 use App\Status;
 use App\Status;
 use App\Services\AccountService;
 use App\Services\AccountService;
 
 
-class IncrementPostCount implements ShouldQueue
+class IncrementPostCount implements ShouldQueue, ShouldBeUniqueUntilProcessing
 {
 {
 	use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
 	use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
 
 
 	public $id;
 	public $id;
 
 
+	public $timeout = 900;
+	public $tries = 3;
+	public $maxExceptions = 1;
+	public $failOnTimeout = true;
+
+	/**
+	 * The number of seconds after which the job's unique lock will be released.
+	 *
+	 * @var int
+	 */
+	public $uniqueFor = 3600;
+
+	/**
+	 * Get the unique ID for the job.
+	 */
+	public function uniqueId(): string
+	{
+		return 'propipe:ipc:' . $this->id;
+	}
+
+	/**
+	 * Get the middleware the job should pass through.
+	 *
+	 * @return array<int, object>
+	 */
+	public function middleware(): array
+	{
+		return [(new WithoutOverlapping("propipe:ipc:{$this->id}"))->shared()->dontRelease()];
+	}
+
 	/**
 	/**
 	 * Create a new job instance.
 	 * Create a new job instance.
 	 *
 	 *
@@ -47,6 +79,7 @@ class IncrementPostCount implements ShouldQueue
 		$profile->last_status_at = now();
 		$profile->last_status_at = now();
 		$profile->save();
 		$profile->save();
 		AccountService::del($id);
 		AccountService::del($id);
+		AccountService::get($id);
 
 
 		return 1;
 		return 1;
 	}
 	}