@@ -22,11 +22,6 @@ class QlessQueue extends Queue implements QueueContract
22
22
23
23
private const WORKER_PREFIX = 'laravel_ ' ;
24
24
25
- /**
26
- * @var Client
27
- */
28
- private $ connect ;
29
-
30
25
/**
31
26
* @var string
32
27
*/
@@ -37,14 +32,17 @@ class QlessQueue extends Queue implements QueueContract
37
32
*/
38
33
private $ config ;
39
34
35
+ /** @var QlessConnectionHandler */
36
+ private $ clients ;
37
+
40
38
/**
41
39
* QlessQueue constructor.
42
- * @param Client $connect
40
+ * @param QlessConnectionHandler $clients
43
41
* @param array $config
44
42
*/
45
- public function __construct (Client $ connect , array $ config )
43
+ public function __construct (QlessConnectionHandler $ clients , array $ config )
46
44
{
47
- $ this ->connect = $ connect ;
45
+ $ this ->clients = $ clients ;
48
46
$ this ->defaultQueue = $ config ['queue ' ] ?? null ;
49
47
$ this ->connectionName = $ config ['connection ' ] ?? '' ;
50
48
$ this ->config = $ config ;
@@ -53,20 +51,20 @@ public function __construct(Client $connect, array $config)
53
51
/**
54
52
* Get the size of the queue.
55
53
*
56
- * @param string $queue
54
+ * @param string $queue
57
55
* @return int
58
56
*/
59
57
public function size ($ queue = null ): int
60
58
{
61
- return $ this ->getConnection ()->length ($ queue ?? '' );
59
+ return $ this ->getNextConnection ()->length ($ queue ?? '' );
62
60
}
63
61
64
62
/**
65
63
* Push a raw payload onto the queue.
66
64
*
67
- * @param string $payload
68
- * @param string $queueName
69
- * @param array $options
65
+ * @param string $payload
66
+ * @param string $queueName
67
+ * @param array $options
70
68
* @return mixed
71
69
*/
72
70
public function pushRaw ($ payload , $ queueName = null , array $ options = [])
@@ -75,7 +73,7 @@ public function pushRaw($payload, $queueName = null, array $options = [])
75
73
76
74
$ queueName = $ queueName ?? $ this ->defaultQueue ;
77
75
78
- $ queue = $ this ->getConnection ()->queues [$ queueName ];
76
+ $ queue = $ this ->getRandomConnection ()->queues [$ queueName ];
79
77
80
78
$ qlessOptions = $ payloadData ['data ' ][self ::JOB_OPTIONS_KEY ] ?? [];
81
79
@@ -96,23 +94,23 @@ public function pushRaw($payload, $queueName = null, array $options = [])
96
94
/**
97
95
* Push a new job onto the queue.
98
96
*
99
- * @param string|object $job
100
- * @param mixed $data
101
- * @param string $queueName
97
+ * @param string|object $job
98
+ * @param mixed $data
99
+ * @param string $queueName
102
100
* @return mixed
103
101
*/
104
102
public function push ($ job , $ data = '' , $ queueName = null )
105
103
{
106
- return $ this ->pushRaw ($ this ->makePayload ($ job , (array ) $ data ), $ queueName );
104
+ return $ this ->pushRaw ($ this ->makePayload ($ job , (array )$ data ), $ queueName );
107
105
}
108
106
109
107
/**
110
108
* Push a new job onto the queue after a delay.
111
109
*
112
- * @param \DateTimeInterface|\DateInterval|int $delay
113
- * @param string|object $job
114
- * @param mixed $data
115
- * @param string $queueName
110
+ * @param \DateTimeInterface|\DateInterval|int $delay
111
+ * @param string|object $job
112
+ * @param mixed $data
113
+ * @param string $queueName
116
114
* @return mixed
117
115
*/
118
116
public function later ($ delay , $ job , $ data = '' , $ queueName = null )
@@ -139,7 +137,7 @@ public function later($delay, $job, $data = '', $queueName = null)
139
137
public function recur (int $ interval , string $ job , array $ data , ?string $ queueName = null ): string
140
138
{
141
139
/** @var \Qless\Queues\Queue $queue */
142
- $ queue = $ this ->getConnection ()->queues [$ queueName ];
140
+ $ queue = $ this ->getNextConnection ()->queues [$ queueName ];
143
141
144
142
$ options = $ data [self ::JOB_OPTIONS_KEY ] ?? [];
145
143
$ options = array_merge ($ options , ['interval ' => $ interval ]);
@@ -160,16 +158,18 @@ public function recur(int $interval, string $job, array $data, ?string $queueNam
160
158
/**
161
159
* Pop the next job off of the queue.
162
160
*
163
- * @param string $queueName
161
+ * @param string $queueName
164
162
* @return QlessJob|null
165
163
*/
166
164
public function pop ($ queueName = null )
167
165
{
166
+ $ connection = $ this ->getNextConnection ();
167
+
168
168
/** @var \Qless\Queues\Queue $queue */
169
- $ queue = $ this -> getConnection () ->queues [$ queueName ];
169
+ $ queue = $ connection ->queues [$ queueName ];
170
170
171
171
/** @var BaseJob $job */
172
- $ job = $ queue ->pop (self ::WORKER_PREFIX . $ this -> connect ->getWorkerName ());
172
+ $ job = $ queue ->pop (self ::WORKER_PREFIX . $ connection ->getWorkerName ());
173
173
174
174
if (!$ job ) {
175
175
return null ;
@@ -195,10 +195,14 @@ public function subscribe(string $topic, string $queueName = null): bool
195
195
{
196
196
$ queueName = $ queueName ?? $ this ->defaultQueue ;
197
197
198
- /** @var \Qless\Queues\Queue $queue */
199
- $ queue = $ this ->getConnection ()->queues [$ queueName ];
198
+ $ result = true ;
199
+ foreach ($ this ->getAllConnections () as $ connection ) {
200
+ /** @var \Qless\Queues\Queue $queue */
201
+ $ queue = $ connection ->queues [$ queueName ];
202
+ $ result = $ queue ->subscribe ($ topic ) && $ result ;
203
+ }
200
204
201
- return $ queue -> subscribe ( $ topic ) ;
205
+ return $ result ;
202
206
}
203
207
204
208
/**
@@ -210,10 +214,14 @@ public function unSubscribe(string $topic, string $queueName = null): bool
210
214
{
211
215
$ queueName = $ queueName ?? $ this ->defaultQueue ;
212
216
213
- /** @var \Qless\Queues\Queue $queue */
214
- $ queue = $ this ->getConnection ()->queues [$ queueName ];
217
+ $ result = true ;
218
+ foreach ($ this ->getAllConnections () as $ connection ) {
219
+ /** @var \Qless\Queues\Queue $queue */
220
+ $ queue = $ connection ->queues [$ queueName ];
221
+ $ result = $ queue ->unSubscribe ($ topic ) && $ result ;
222
+ }
215
223
216
- return $ queue -> unSubscribe ( $ topic ) ;
224
+ return $ result ;
217
225
}
218
226
219
227
/**
@@ -225,7 +233,7 @@ public function unSubscribe(string $topic, string $queueName = null): bool
225
233
*/
226
234
public function pushToTopic (string $ topicName , string $ job , array $ data = [], array $ options = [])
227
235
{
228
- $ topic = new Topic ($ topicName , $ this ->getConnection ());
236
+ $ topic = new Topic ($ topicName , $ this ->getRandomConnection ());
229
237
230
238
$ qlessOptions = $ payloadData ['data ' ][self ::JOB_OPTIONS_KEY ] ?? [];
231
239
$ options = array_merge ($ qlessOptions , $ options );
@@ -281,10 +289,25 @@ protected function makePayload($job, $data = [], $options = []): string
281
289
}
282
290
283
291
/**
284
- * @return Client
292
+ * @return Client[]
285
293
*/
286
- public function getConnection (): Client
294
+ public function getAllConnections (): array
295
+ {
296
+ return $ this ->clients ->getAllClients ();
297
+ }
298
+
299
+ public function getRandomConnection (): Client
300
+ {
301
+ return $ this ->clients ->getNextClient ();
302
+ }
303
+
304
+ public function getNextConnection (): Client
305
+ {
306
+ return $ this ->clients ->getNextClient ();
307
+ }
308
+
309
+ public function getCurrentConnection (): Client
287
310
{
288
- return $ this ->connect ;
311
+ return $ this ->clients -> getCurrentClient () ;
289
312
}
290
313
}
0 commit comments