Skip to content

Commit b9eb356

Browse files
authored
Merge pull request #6 from Sin30/all-fix
Fix several bugs that stopping this queue from working #6 by Sin30
2 parents f30a279 + c2f11e8 commit b9eb356

File tree

4 files changed

+27
-19
lines changed

4 files changed

+27
-19
lines changed

src/Queue/Jobs/KafkaJob.php

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Rapide\LaravelQueueKafka\Queue\Jobs;
44

55
use Exception;
6+
use Illuminate\Container\Container;
67
use Illuminate\Contracts\Queue\Job as JobContract;
78
use Illuminate\Database\DetectsDeadlocks;
89
use Illuminate\Queue\Jobs\Job;
@@ -22,15 +23,19 @@ class KafkaJob extends Job implements JobContract
2223
/**
2324
* KafkaJob constructor.
2425
*
26+
* @param Container $container
2527
* @param KafkaQueue $connection
2628
* @param Message $message
27-
* @param $queue
29+
* @param $connectionName
30+
* @param $queue
2831
*/
29-
public function __construct(KafkaQueue $connection, Message $message, $queue)
32+
public function __construct(Container $container, KafkaQueue $connection, Message $message, $connectionName, $queue)
3033
{
34+
$this->container = $container;
3135
$this->connection = $connection;
32-
$this->queue = $queue;
3336
$this->message = $message;
37+
$this->connectionName = $connectionName;
38+
$this->queue = $queue;
3439
}
3540

3641
/**
@@ -67,7 +72,7 @@ public function fire()
6772
*/
6873
public function attempts()
6974
{
70-
return 1;
75+
return (int) ($this->payload()['attempts']) + 1;
7176
}
7277

7378
/**
@@ -101,7 +106,6 @@ public function release($delay = 0)
101106
parent::release($delay);
102107

103108
$this->delete();
104-
$this->setAttempts($this->attempts() + 1);
105109

106110
$body = $this->payload();
107111

@@ -123,16 +127,6 @@ public function release($delay = 0)
123127
}
124128
}
125129

126-
/**
127-
* Sets the count of attempts at processing this job.
128-
*
129-
* @param int $count
130-
*/
131-
private function setAttempts($count)
132-
{
133-
$this->connection->setAttempts($count);
134-
}
135-
136130
/**
137131
* Get the job identifier.
138132
*

src/Queue/KafkaQueue.php

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ class KafkaQueue extends Queue implements QueueContract
3131
* @var \RdKafka\KafkaConsumer
3232
*/
3333
private $consumer;
34+
/**
35+
* @var array
36+
*/
37+
private $subscribedQueueNames = [];
3438

3539
/**
3640
* @param \RdKafka\Producer $producer
@@ -122,17 +126,24 @@ public function later($delay, $job, $data = '', $queue = null)
122126
*/
123127
public function pop($queue = null)
124128
{
125-
$this->consumer->subscribe([$this->getQueueName($queue)]);
129+
$queue = $this->getQueueName($queue);
130+
if (!in_array($queue, $this->subscribedQueueNames)) {
131+
$this->subscribedQueueNames[] = $queue;
132+
$this->consumer->subscribe($this->subscribedQueueNames);
133+
}
126134

127-
$message = $this->consumer->consume(30 * 1000);
135+
$message = $this->consumer->consume(1000);
128136

129137
if ($message === null) {
130138
return;
131139
}
132140

133141
switch ($message->err) {
134142
case RD_KAFKA_RESP_ERR_NO_ERROR:
135-
return new KafkaJob($this, $message, $queue ?: $this->defaultQueue);
143+
return new KafkaJob(
144+
$this->container, $this, $message,
145+
$this->connectionName, $queue ?: $this->defaultQueue
146+
);
136147
break;
137148
case RD_KAFKA_RESP_ERR__PARTITION_EOF:
138149
case RD_KAFKA_RESP_ERR__TIMED_OUT:

tests/KafkaQueueTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
/**
88
* @property \Mockery\MockInterface producer
99
* @property \Mockery\MockInterface consumer
10+
* @property \Mockery\MockInterface $container
1011
* @property array config
1112
* @property KafkaQueue queue
1213
*/
@@ -18,13 +19,15 @@ public function setUp()
1819

1920
$this->producer = Mockery::mock(\RdKafka\Producer::class);
2021
$this->consumer = Mockery::mock(\RdKafka\KafkaConsumer::class);
22+
$this->container = Mockery::mock(\Illuminate\Container\Container::class);
2123

2224
$this->config = [
2325
'queue' => str_random(),
2426
'sleep_error' => true,
2527
];
2628

2729
$this->queue = new KafkaQueue($this->producer, $this->consumer, $this->config);
30+
$this->queue->setContainer($this->container);
2831
}
2932

3033
public function test_size()

travis-install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ cd /tmp \
1212

1313
pecl install rdkafka
1414

15-
echo "extension = rdkafka.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
15+
echo "extension=rdkafka.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini

0 commit comments

Comments
 (0)