PHP code example of ananiaslitz / hyperf-avro

1. Go to this page and download the library: Download ananiaslitz/hyperf-avro 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/ */

    

ananiaslitz / hyperf-avro example snippets


return [
    'schema_path' => BASE_PATH . '/storage/avro',
    'registry' => [
        'base_url' => env('SCHEMA_REGISTRY_URL', 'http://localhost:8081'),
        'auth' => [
            'key'    => env('SCHEMA_REGISTRY_KEY'),
            'secret' => env('SCHEMA_REGISTRY_SECRET'),
            'token'  => env('SCHEMA_REGISTRY_TOKEN'),
        ],
        'subject_cache_ttl' => (int) env('SCHEMA_REGISTRY_SUBJECT_CACHE_TTL', 300),
        'ssl_verify' => (bool) env('SCHEMA_REGISTRY_SSL_VERIFY', true),
    ],
];

use Ananiaslitz\HyperfAvro\KafkaAvroSerializer;

class UserProducer
{
    public function __construct(private KafkaAvroSerializer $avro) {}

    public function send(array $userData)
    {
        // encode() registra/busca o schema, resolve o ID e retorna o binário (wire format)
        $payload = $this->avro->encode($userData, 'user-events-value');
        
        // Agora envie $payload via hyperf/kafka ou similar
    }
}

use Ananiaslitz\HyperfAvro\KafkaAvroSerializer;

class UserConsumer
{
    public function __construct(private KafkaAvroSerializer $avro) {}

    public function onMessage(string $value)
    {
        // decode() lê o ID, busca o schema no registry (cached) e deserializa os dados
        $data = $this->avro->decode($value);
        
        // $data['username']...
    }
}

use Ananiaslitz\HyperfAvro\Annotation\AvroDeserialize;

class EventConsumer
{
    #[AvroDeserialize(schema: 'user-events-value')]
    public function handle(string $payload): void
    {
        // $payload já chega como array associativo
    }
}

use Ananiaslitz\HyperfAvro\Exception\AvroSerializationException;

try {
    $payload = $avro->encode($data, 'subject');
} catch (AvroSerializationException $e) {
    // Erro no registry, schema incompatível ou payload inválido
}
bash
php bin/hyperf.php vendor:publish ananiaslitz/hyperf-avro