1313use Jobcloud \Kafka \Message \KafkaConsumerMessageInterface ;
1414use RdKafka \Exception as RdKafkaException ;
1515use RdKafka \Message as RdKafkaMessage ;
16+ use RdKafka \TopicPartition ;
1617use RdKafka \TopicPartition as RdKafkaTopicPartition ;
1718use RdKafka \KafkaConsumer as RdKafkaHighLevelConsumer ;
1819
@@ -41,13 +42,14 @@ public function __construct(
4142 * Subscribes to all defined topics, if no partitions were set, subscribes to all partitions.
4243 * If partition(s) (and optionally offset(s)) were set, subscribes accordingly
4344 *
45+ * @param array<TopicSubscription> $topicSubscriptions
4446 * @throws KafkaConsumerSubscriptionException
4547 * @return void
4648 */
47- public function subscribe (): void
49+ public function subscribe (array $ topicSubscriptions = [] ): void
4850 {
49- $ subscriptions = $ this ->getTopicSubscriptions ();
50- $ assignments = $ this ->getTopicAssignments ();
51+ $ subscriptions = $ this ->getTopicSubscriptions ($ topicSubscriptions );
52+ $ assignments = $ this ->getTopicAssignments ($ topicSubscriptions );
5153
5254 if ([] !== $ subscriptions && [] !== $ assignments ) {
5355 throw new KafkaConsumerSubscriptionException (
@@ -239,13 +241,18 @@ private function getOffsetsToCommitForMessages(array $messages): array
239241 }
240242
241243 /**
244+ * @param array<TopicSubscription> $topicSubscriptions
242245 * @return array|string[]
243246 */
244- private function getTopicSubscriptions (): array
247+ private function getTopicSubscriptions (array $ topicSubscriptions = [] ): array
245248 {
246249 $ subscriptions = [];
247250
248- foreach ($ this ->kafkaConfiguration ->getTopicSubscriptions () as $ topicSubscription ) {
251+ if ([] === $ topicSubscriptions ) {
252+ $ topicSubscriptions = $ this ->kafkaConfiguration ->getTopicSubscriptions ();
253+ }
254+
255+ foreach ($ topicSubscriptions as $ topicSubscription ) {
249256 if (
250257 [] !== $ topicSubscription ->getPartitions ()
251258 || KafkaConsumerBuilderInterface::OFFSET_STORED !== $ topicSubscription ->getOffset ()
@@ -259,13 +266,18 @@ private function getTopicSubscriptions(): array
259266 }
260267
261268 /**
269+ * @param array<TopicSubscription> $topicSubscriptions
262270 * @return array|RdKafkaTopicPartition[]
263271 */
264- private function getTopicAssignments (): array
272+ private function getTopicAssignments (array $ topicSubscriptions = [] ): array
265273 {
266274 $ assignments = [];
267275
268- foreach ($ this ->kafkaConfiguration ->getTopicSubscriptions () as $ topicSubscription ) {
276+ if ([] === $ topicSubscriptions ) {
277+ $ topicSubscriptions = $ this ->kafkaConfiguration ->getTopicSubscriptions ();
278+ }
279+
280+ foreach ($ topicSubscriptions as $ topicSubscription ) {
269281 if (
270282 [] === $ topicSubscription ->getPartitions ()
271283 && KafkaConsumerBuilderInterface::OFFSET_STORED === $ topicSubscription ->getOffset ()
0 commit comments