22
33namespace G4 \Tasker \Tasker2 ;
44
5- use G4 \Tasker \Consts ;
65use G4 \Tasker \TaskAbstract ;
6+ use G4 \Tasker \Tasker2 \Queue \BatchPublisher ;
77use PhpAmqpLib \Connection \AMQPStreamConnection ;
8- use PhpAmqpLib \Message \AMQPMessage ;
98use G4 \ValueObject \Uuid ;
109
1110class TaskQueue
@@ -16,7 +15,7 @@ class TaskQueue
1615 private $ queue ;
1716
1817 /**
19- * @var AMQPStreamConnection
18+ * @var AMQPStreamConnection | null
2019 */
2120 private $ AMQPConnection ;
2221
@@ -37,7 +36,7 @@ class TaskQueue
3736
3837 public function __construct (
3938 \G4 \Tasker \Queue $ queue ,
40- AMQPStreamConnection $ AMQPConnection ,
39+ AMQPStreamConnection $ AMQPConnection = null ,
4140 MessageOptions $ messageOptions ,
4241 $ requestUuid = null
4342 )
@@ -97,6 +96,14 @@ private function saveCurrentTasks($tasks)
9796 if (count ($ tasks ) === 0 ) {
9897 return $ this ;
9998 }
99+
100+ if ($ this ->AMQPConnection === null ) {
101+ // in case that rabbitmq is not available save tasks to database
102+ $ this ->saveDelayedTasks ($ tasks );
103+ trigger_error ('RabbitMQ connection is not available for Tasker TaskQueue ' , E_USER_NOTICE );
104+ return $ this ;
105+ }
106+
100107 $ channel = $ this ->AMQPConnection ->channel ();
101108
102109 $ messages = array_map (function (TaskAbstract $ taskAbstract ) {
@@ -105,20 +112,10 @@ private function saveCurrentTasks($tasks)
105112 return (new AmqpMessageFactory ($ task , $ this ->messageOptions ->getDeliveryMode ()))->create ();
106113 }, $ tasks );
107114
108- foreach ($ messages as $ message ) {
109- $ decodedMessageBody = json_decode ($ message ->getBody (), 1 );
110- $ binding = ($ this ->messageOptions ->hasBindingHP () && isset ($ decodedMessageBody [Consts::PARAM_PRIORITY ])
111- && ($ decodedMessageBody [Consts::PARAM_PRIORITY ] > Consts::PRIORITY_50 ))
112- ? $ this ->messageOptions ->getBindingHP ()
113- : $ this ->messageOptions ->getBinding ();
114- $ channel ->batch_basic_publish (
115- $ message ,
116- $ this ->messageOptions ->getExchange (),
117- $ binding
118- );
119- }
120- $ channel ->publish_batch ();
115+ $ queuePublisher = new BatchPublisher ($ channel , $ this ->messageOptions );
116+ $ queuePublisher ->publish (...$ messages );
121117 $ channel ->close ();
118+ return $ this ;
122119 }
123120
124121 private function getRequestUuid ()
0 commit comments