1. Go to this page and download the library: Download quarks-tech/protoevent-php 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/ */
quarks-tech / protoevent-php example snippets
use QuarksTech\ProtoEvent\EventBus\Publisher;
use QuarksTech\ProtoEvent\Transport\Amqp\AmqpConnection;
use QuarksTech\ProtoEvent\Transport\Amqp\AmqpSender;
$connection = new AmqpConnection('localhost', 5672, 'guest', 'guest');
$sender = new AmqpSender($connection);
$publisher = new Publisher($sender);
// Setup exchange (once per service)
$sender->setup($serviceDesc);
// Publish using generated typed publisher
$typedPublisher = new \Your\Namespace\EventBus\Publisher($publisher);
$typedPublisher->publishYourEvent($event);
use QuarksTech\ProtoEvent\EventBus\Subscriber;
use QuarksTech\ProtoEvent\Transport\Amqp\AmqpConnection;
use QuarksTech\ProtoEvent\Transport\Amqp\ParkingLotReceiver;
use QuarksTech\ProtoEvent\Transport\Amqp\ParkingLotReceiverOptions;
$connection = new AmqpConnection('localhost', 5672, 'guest', 'guest');
$receiver = new ParkingLotReceiver($connection, new ParkingLotReceiverOptions(
queueName: 'my-consumer',
maxRetries: 3,
retryBackoffMs: 15000,
));
$subscriber = new Subscriber('my-consumer');
// Register handlers using generated registration functions
\Your\Namespace\EventBus\Registration::registerYourEventHandler($subscriber, $handler);
// Start consuming (blocks until signal)
$subscriber->subscribe($receiver);
class SubscriptionCreatedHandler implements SubscriptionCreatedEventHandler
{
public function handleSubscriptionCreatedEvent(EventContext $ctx, SubscriptionCreatedEvent $event): void
{
// Handle subscription created
}
}
class SubscriptionUpdatedHandler implements SubscriptionUpdatedEventHandler
{
public function handleSubscriptionUpdatedEvent(EventContext $ctx, SubscriptionUpdatedEvent $event): void
{
// Handle subscription updated
}
}
use QuarksTech\ProtoEvent\EventBus\Publisher;
use QuarksTech\ProtoEvent\EventBus\Subscriber;
use QuarksTech\ProtoEvent\Transport\InMemory\InMemoryTransport;
// Create shared transport
$transport = new InMemoryTransport();
// Publisher uses transport as sender
$publisher = new Publisher($transport);
// Subscriber uses transport as receiver
$subscriber = new Subscriber('test-consumer');
// Publish events
$publisher->publish('example.v1.TestEvent', $event);
// Verify messages
$this->assertSame(1, $transport->count());
$messages = $transport->getMessages();
// Consume events
$subscriber->subscribe($transport);
// Clear for next test
$transport->clear(); // clears messages only
$transport->reset(); // clears messages and services
use QuarksTech\ProtoEvent\EventBus\PublisherInterceptor;
use QuarksTech\ProtoEvent\EventBus\SubscriberInterceptor;
// Publisher interceptor
class TracingPublisherInterceptor implements PublisherInterceptor
{
public function intercept(Metadata $metadata, Message $event, callable $next): void
{
$metadata = $metadata->withExtension('traceid', $this->traceId);
$next($metadata, $event);
}
}
// Subscriber interceptor
class LoggingSubscriberInterceptor implements SubscriberInterceptor
{
public function intercept(EventContext $context, mixed $event, callable $next): void
{
$this->logger->info('Processing: ' . $context->getMetadata()->getType());
$next($context, $event);
}
}
// Add to publisher/subscriber
$publisher->withInterceptor(new TracingPublisherInterceptor($tracer));
$subscriber->withInterceptor(new LoggingSubscriberInterceptor($logger));
bash
composer
bash
go install github.com/quarks-tech/ddkitapis-generator-go/cmd/protoc-gen-php-eventbus@latest
bash
# Consumes SubscriptionCreated and SubscriptionUpdated events
php bin/console protoevent:consume monolith.v2.subscriptions
# Run in another pod
php bin/console protoevent:consume monolith.v2.notifications
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.