定制 ananiaslitz/hyperf-avro 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

ananiaslitz/hyperf-avro

最新稳定版本:1.0.0

Composer 安装命令:

composer require ananiaslitz/hyperf-avro

包简介

Avro integration for Hyperf framework with AOP support

README 文档

README

License: MIT

Integração do Apache Avro com o framework Hyperf focada em Kafka e Confluent Schema Registry.

Recursos

  • Confluent Wire Format: Suporte nativo ao formato 0x00 (magic byte) + 4 bytes (Schema ID).
  • Schema Registry: Cliente Guzzle para integração com Confluent Schema Registry.
  • Cache de Performance: Cache em memória para Schema IDs (permanente) e Subjects (com TTL configurável).
  • AOP Support: Atributos #[AvroSerialize] e #[AvroDeserialize] para facilitar a integração.
  • Fail-fast: Erros de validação e comunicação encapsulados em AvroSerializationException.

Instalação

composer require ananiaslitz/hyperf-avro

Publique o arquivo de configuração:

php bin/hyperf.php vendor:publish ananiaslitz/hyperf-avro

Configuração

O arquivo config/autoload/avro.php permite configurar o path local e a conexão com o Registry:

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),
    ],
];

Uso com Kafka

1. Produzir Mensagem (Producer)

Use o KafkaAvroSerializer para converter seus dados no formato compatível com o ecossistema Confluent:

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
    }
}

2. Consumir Mensagem (Consumer)

O deserializer identifica automaticamente o schema pelo ID embutido nos primeiros bytes da mensagem:

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']...
    }
}

3. Usando Atributos (AOP)

Para consumidores que recebem a string binária como primeiro argumento:

use Ananiaslitz\HyperfAvro\Annotation\AvroDeserialize;

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

Exceções

Trate erros de schema ou registry de forma granular:

use Ananiaslitz\HyperfAvro\Exception\AvroSerializationException;

try {
    $payload = $avro->encode($data, 'subject');
} catch (AvroSerializationException $e) {
    // Erro no registry, schema incompatível ou payload inválido
}

Licença

MIT

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-02-23

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固