ensi / laravel-phprdkafka-producer
Opiniated High Level producer for laravel-phprdkafka
Installs: 28 326
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 2
Forks: 1
Open Issues: 0
Requires
- php: ^8.0
- ext-rdkafka: *
- ensi/laravel-phprdkafka: ^0.3.0
- illuminate/contracts: ^8.37 || ^9 || ^10
- illuminate/pipeline: ^8.37 || ^9 || ^10
- illuminate/support: ^8.37 || ^9 || ^10
Requires (Dev)
- brianium/paratest: ^6.2 || ^7.0
- friendsofphp/php-cs-fixer: ^3.2
- kwn/php-rdkafka-stubs: ^2.2
- nunomaduro/collision: ^5.3 || ^6 || ^7.0
- orchestra/testbench: ^6.15 || ^7 || ^8.0
- pestphp/pest: ^1.18 || ^2.0
- pestphp/pest-plugin-laravel: ^1.1 || ^2.0
- php-parallel-lint/php-var-dump-check: ^0.5.0
- phpunit/phpunit: ^9.3 || ^10.0
- spatie/laravel-ray: ^1.9
README
Opiniated High Level producer for ensi/laravel-phprdkafka
Installation
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"
Usage
Send a single message:
use Ensi\LaravelPhpRdKafkaProducer\HighLevelProducer; (new HighLevelProducer($topicKey))->sendOne($messageString);
Send several messages at once:
(new HighLevelProducer($topicKey))->sendMany([$message1String, $message2String]);
All options with defaults:
use Ensi\LaravelPhpRdKafkaProducer\HighLevelProducer; use Ensi\LaravelPhpRdKafkaProducer\Exceptions\KafkaProducerException; $producer = new HighLevelProducer( topicKey: $topicKey, producerName: 'some-producer-from-ensi/laravel-phprdkafka-config', flushTimeout: 5000, // ms flushRetries: 5, ); try { $producer ->setFlushTimeout(10000) ->setFlushRetries(10) ->sendOne($messageString); } catch (KafkaProducerException $e) { //... }
Middleware
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); } }
Testing
cp .env.example .env vim .env # add real kafka credentials composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
License
The MIT License (MIT). Please see License File for more information.