Opiniated High Level producer for ensi/laravel-phprdkafka
Firstly, you have to install and configure ensi/laravel-phprdkafka
Then,
composer require ensi/laravel-phprdkafka-producer
Publish the config file if you need it:
php artisan vendor:publish --provider="Ensi\LaravelPhpRdKafkaProducer\LaravelPhpRdKafkaProducerServiceProvider" --tag="kafka-producer-config"
Send a single message:
use Ensi\LaravelPhpRdKafkaProducer\HighLevelProducer;
(new HighLevelProducer($topicName))->sendOne($messageString);
Send several messages at once:
(new HighLevelProducer($topicName))->sendMany([$message1String, $message2String]);
All options with defaults:
use Ensi\LaravelPhpRdKafkaProducer\HighLevelProducer;
use Ensi\LaravelPhpRdKafkaProducer\Exceptions\KafkaProducerException;
$producer = new HighLevelProducer(
topicName: $topicName,
producerName: 'some-producer-from-ensi/laravel-phprdkafka-config',
flushTimeout: 5000, // ms
flushRetries: 5,
);
try {
$producer
->setFlushTimeout(10000)
->setFlushRetries(10)
->sendOne($messageString);
} catch (KafkaProducerException $e) {
//...
}
You can add middleware globally via config or locally for specific Producer:
$producer->pushMiddleware(SomeMiddleware::class)
->sendOne($messageString);
Middleware example:
use Closure;
use Ensi\LaravelPhpRdKafkaProducer\ProducerMessage;
class SomeMiddleware
{
public function handle(ProducerMessage $message, Closure $next): mixed
{
$message->headers = $message->headers ?: [];
$message->headers['Header-Name'] = 'Header Value';
return $next($message);
}
}
composer test
Please see CHANGELOG for more information on what has changed recently.
The MIT License (MIT). Please see License File for more information.