Skip to content

Commit 15b92ec

Browse files
authored
feat(MPC-616): add getTopicSubscriptions method to consumers (#66)
* feat(MPC-616): add getTopicSubscriptions method to consumers * feat(MPC-616): adjust 'for next major release' comment * feat(MPC-616): fix method annotation
1 parent b02c90f commit 15b92ec

File tree

5 files changed

+70
-4
lines changed

5 files changed

+70
-4
lines changed

src/Consumer/AbstractKafkaConsumer.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,14 @@ protected function getConsumerMessage(RdKafkaMessage $message): KafkaConsumerMes
235235
);
236236
}
237237

238+
/**
239+
* @return array<int, TopicSubscription>
240+
*/
241+
public function getTopicSubscriptions(): array
242+
{
243+
return $this->kafkaConfiguration->getTopicSubscriptions();
244+
}
245+
238246
/**
239247
* @param integer $timeoutMs
240248
* @return null|RdKafkaMessage

src/Consumer/KafkaConsumerInterface.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44

55
namespace Jobcloud\Kafka\Consumer;
66

7-
use Jobcloud\Kafka\Consumer\ConsumerInterface;
87
use Jobcloud\Kafka\Message\KafkaConsumerMessageInterface;
98
use RdKafka\Metadata\Topic as RdKafkaMetadataTopic;
10-
use RdKafka\ConsumerTopic as RdKafkaConsumerTopic;
119
use RdKafka\TopicPartition as RdKafkaTopicPartition;
1210

11+
/**
12+
* @todo v2: subscribe(array $topicSubscriptions = [])
13+
* @method array getTopicSubscriptions()
14+
*/
15+
1316
interface KafkaConsumerInterface
1417
{
1518
/**
@@ -105,4 +108,11 @@ public function getFirstOffsetForTopicPartition(string $topic, int $partition, i
105108
* @return integer
106109
*/
107110
public function getLastOffsetForTopicPartition(string $topic, int $partition, int $timeoutMs): int;
111+
112+
/**
113+
* @todo v2
114+
*
115+
* @return array<int, TopicSubscription>
116+
*/
117+
//public function getTopicSubscriptions(): array;
108118
}

src/Consumer/KafkaHighLevelConsumer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public function __construct(
4848
*/
4949
public function subscribe(array $topicSubscriptions = []): void
5050
{
51-
$subscriptions = $this->getTopicSubscriptions($topicSubscriptions);
51+
$subscriptions = $this->getTopicSubscriptionNames($topicSubscriptions);
5252
$assignments = $this->getTopicAssignments($topicSubscriptions);
5353

5454
if ([] !== $subscriptions && [] !== $assignments) {
@@ -244,7 +244,7 @@ private function getOffsetsToCommitForMessages(array $messages): array
244244
* @param array<TopicSubscription> $topicSubscriptions
245245
* @return array|string[]
246246
*/
247-
private function getTopicSubscriptions(array $topicSubscriptions = []): array
247+
private function getTopicSubscriptionNames(array $topicSubscriptions = []): array
248248
{
249249
$subscriptions = [];
250250

tests/Unit/Consumer/KafkaHighLevelConsumerTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Jobcloud\Kafka\Tests\Unit\Kafka\Consumer;
44

55
use Jobcloud\Kafka\Consumer\KafkaHighLevelConsumer;
6+
use Jobcloud\Kafka\Consumer\TopicSubscriptionInterface;
67
use Jobcloud\Kafka\Exception\KafkaConsumerConsumeException;
78
use Jobcloud\Kafka\Message\Decoder\DecoderInterface;
89
use Jobcloud\Kafka\Consumer\TopicSubscription;
@@ -639,6 +640,29 @@ public function testClose(): void
639640
$kafkaConsumer->close();
640641
}
641642

643+
/**
644+
* @return void
645+
*/
646+
public function testGetTopicSubscriptionsReturnsTopicSubscriptions(): void
647+
{
648+
$rdKafkaConsumerMock = $this->createMock(RdKafkaHighLevelConsumer::class);
649+
$decoderMock = $this->getMockForAbstractClass(DecoderInterface::class);
650+
651+
$topicSubscriptionsMock = [
652+
$this->createMock(TopicSubscriptionInterface::class),
653+
$this->createMock(TopicSubscriptionInterface::class)
654+
];
655+
656+
$kafkaConfigurationMock = $this->createMock(KafkaConfiguration::class);
657+
$kafkaConfigurationMock->expects(self::once())
658+
->method('getTopicSubscriptions')
659+
->willReturn($topicSubscriptionsMock);
660+
661+
$kafkaConsumer = new KafkaHighLevelConsumer($rdKafkaConsumerMock, $kafkaConfigurationMock, $decoderMock);
662+
663+
self::assertSame($topicSubscriptionsMock, $kafkaConsumer->getTopicSubscriptions());
664+
}
665+
642666
/**
643667
* @param int $partitionId
644668
* @return RdKafkaMetadataPartition|MockObject

tests/Unit/Consumer/KafkaLowLevelConsumerTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Jobcloud\Kafka\Tests\Unit\Kafka\Consumer;
44

55
use Jobcloud\Kafka\Consumer\KafkaLowLevelConsumer;
6+
use Jobcloud\Kafka\Consumer\TopicSubscriptionInterface;
67
use Jobcloud\Kafka\Exception\KafkaConsumerEndOfPartitionException;
78
use Jobcloud\Kafka\Exception\KafkaConsumerTimeoutException;
89
use Jobcloud\Kafka\Message\Decoder\DecoderInterface;
@@ -555,6 +556,29 @@ function (string $topic, int $partition, int &$lowOffset, int &$highOffset, int
555556
$this->assertEquals(5, $lowOffset);
556557
}
557558

559+
/**
560+
* @return void
561+
*/
562+
public function testGetTopicSubscriptionsReturnsTopicSubscriptions(): void
563+
{
564+
$rdKafkaConsumerMock = $this->createMock(RdKafkaLowLevelConsumer::class);
565+
$decoderMock = $this->getMockForAbstractClass(DecoderInterface::class);
566+
567+
$topicSubscriptionsMock = [
568+
$this->createMock(TopicSubscriptionInterface::class),
569+
$this->createMock(TopicSubscriptionInterface::class)
570+
];
571+
572+
$kafkaConfigurationMock = $this->createMock(KafkaConfiguration::class);
573+
$kafkaConfigurationMock->expects(self::once())
574+
->method('getTopicSubscriptions')
575+
->willReturn($topicSubscriptionsMock);
576+
577+
$kafkaConsumer = new KafkaLowLevelConsumer($rdKafkaConsumerMock, $kafkaConfigurationMock, $decoderMock);
578+
579+
self::assertSame($topicSubscriptionsMock, $kafkaConsumer->getTopicSubscriptions());
580+
}
581+
558582
/**
559583
* @param int $partitionId
560584
* @return RdKafkaMetadataPartition|MockObject

0 commit comments

Comments
 (0)