33namespace CulturalInfusion \LaravelSqsFifo \Services ;
44
55use Aws \Sqs \SqsClient ;
6- use Exception ;
6+ use BadMethodCallException ;
77use Illuminate \Queue \SqsQueue ;
88
99class SqsFifoQueue extends SqsQueue
@@ -23,7 +23,14 @@ class SqsFifoQueue extends SqsQueue
2323 protected string $ queue_name_prefix ;
2424
2525 /**
26- * The queue name suffix.
26+ * The flag to check whether to use default delay of the Queue on Messages.
27+ *
28+ * @var string
29+ */
30+ protected string $ submit_delay ;
31+
32+ /**
33+ * The queue name.
2734 *
2835 * @var string
2936 */
@@ -44,6 +51,8 @@ class SqsFifoQueue extends SqsQueue
4451 * @param string $prefix
4552 * @param string $suffix
4653 * @param string $message_group_id
54+ * @param string $queue_name_prefix
55+ * @param bool $submit_delay
4756 * @return void
4857 */
4958 public function __construct (
@@ -52,11 +61,13 @@ public function __construct(
5261 string $ prefix = '' ,
5362 string $ suffix = '' ,
5463 string $ message_group_id = null ,
55- string $ queue_name_prefix = ''
64+ string $ queue_name_prefix = '' ,
65+ bool $ submit_delay = true
5666 ) {
5767 parent ::__construct ($ sqs , $ default , $ prefix );
5868 $ this ->message_group_id = $ message_group_id ;
5969 $ this ->queue_name_prefix = $ queue_name_prefix ;
70+ $ this ->submit_delay = $ submit_delay ;
6071 $ this ->suffix = $ suffix ;
6172 }
6273
@@ -94,12 +105,25 @@ public function pushRaw($payload, $queue = null, $options = []): string|null
94105 }
95106
96107 /**
97- * SQS FIFO does not support DelaySeconds currently.
108+ * Since SQS FIFO does not support delay per message,
109+ * this method checks whether to apply delay value of
110+ * the queue on the job, or throw an exception otherwise.
111+ *
112+ * @param \DateTime|int $delay
113+ * @param string $job
114+ * @param mixed $data
115+ * @param string|null $queue
98116 *
99- * @throw Exception
117+ * @return mixed
118+ *
119+ * @throws BadMethodCallException
100120 */
101- public function later ($ delay , $ job , $ data = '' , $ queue = null ): Exception
121+ public function later ($ delay , $ job , $ data = '' , $ queue = null ): mixed
102122 {
103- throw new Exception ("Cannot support DelaySeconds for FIFO queues. " );
123+ if ($ this ->submit_delay ) {
124+ return $ this ->push ($ job , $ data , $ queue );
125+ }
126+
127+ throw new BadMethodCallException ('SQS FIFO does not support DelaySeconds per message. ' );
104128 }
105129}
0 commit comments