1. Go to this page and download the library: Download kafka-bus/laravel-bridge library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use KafkaBus\Core\Interfaces\Bus\BusInterface;
public function execute(BusInterface $bus): void
{
$bus->publish(new \App\Kafka\Messages\ProductMessage(/* ... */));
}
use KafkaBus\Laravel\Facades\KafkaBus;
KafkaBus::publish(new \App\Kafka\Messages\ProductMessage(/* ... */));
use KafkaBus\Commiter\Interfaces\HasIdempotency;
use KafkaBus\Core\Messages\ProducerMessage;
final class ProductMessage extends ProducerMessage implements HasIdempotency
{
public function __construct(private string $productId) {}
public function getIdempotencyKey(): string
{
return $this->productId;
}
}
use KafkaBus\Laravel\Facades\KafkaBus;
KafkaBus::fake();
use App\Kafka\Messages\ProductMessage;
use KafkaBus\Laravel\Facades\KafkaBus;
it('publishes a product message', function () {
KafkaBus::fake();
app(CreateProductAction::class)->execute(productId: 1);
KafkaBus::assertPublished(ProductMessage::class);
});
// Assert published exactly N times
KafkaBus::assertPublishedTimes(ProductMessage::class, 2);
// Assert a specific message was NOT published
KafkaBus::assertNotPublished(ProductMessage::class);
// Assert no messages were published at all
KafkaBus::assertNothingPublished();
use KafkaBus\Core\Testing\Consumers\MessageFactory;
use KafkaBus\Laravel\Facades\KafkaBus;
it('handles a product message', function () {
KafkaBus::fake();
$message = MessageFactory::for()
->withTopicKey('products')
->withHeaders(['x-idempotency-key' => 'abc-123'])
->make('{"id":1,"name":"Widget"}');
KafkaBus::addMessage($message);
KafkaBus::listen('products');
// Assert side effects produced by the handler
expect(Product::find(1))->not->toBeNull();
});
KafkaBus::addMessage(
MessageFactory::for()->withTopicKey('products')->make('{"id":1}')
);
KafkaBus::listen('products');
// Assert at least one message was committed on the topic
KafkaBus::assertCommitted('products');
// Assert with a condition on the ConsumerMessageInterface
KafkaBus::assertCommitted(
'products',
fn($msg) => $msg->payload() === '{"id":1}'
&& $msg->headers()['x-idempotency-key'] === 'abc-123'
);
// Assert exact count
KafkaBus::assertCommittedTimes('products', 2);
// Assert nothing was committed (e.g. before listen() is called)
KafkaBus::assertNothingCommitted();