定制 idynsys/synced-module 二次开发

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

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

idynsys/synced-module

最新稳定版本:v0.1.4

Composer 安装命令:

composer require idynsys/synced-module

包简介

Module for sync models

README 文档

README

Установка

Используйте composer для установки

composer req idynsys/synced-module
    1. в случае возниковения проблем с зависимостями необходимо использовать ключ -W composer req idynsys/synced-module -W
    2. для работы пакета необходимо установить ext-kafka

Установка (общее)

  1. необходимо добавить в app.php

    Ids\Modules\Synced\Providers\SyncedServiceProvider::class

  2. Добавим файл конфига

    php artisan vendor:publish --tag=synced-config

  3. Запустить php artisan vendor:publish --tag=laravel-kafka-config php artisan vendor:publish --provider="Ids\Modules\Synced\SyncedServiceProvider"

    После, необходимо сконфигурировать kafka.php (если не настроен или ранее mateusjunges/laravel-kafka) см. https://junges.dev/documentation/laravel-kafka/v1.8/3-installation-and-setup необходимые мин ENV для добавления в .env:

    KAFKA_BROKERS: localhost:9092 KAFKA_CONSUMER_GROUP_ID: 'group'

  • после настройки брокера и добавления в .env, необходимо убедиться в доступности брокера kafka по сети (для docker compose необходимо настроить общую сеть)

Добавление модели для отправки в кафку

  1. Для добавления модели необходимо
    1. Добавить интерфейс SyncedModelInterface и трейт (для отслеживания изменение модели)
    2. Зарегистрировать события в конструкторе
    3. Реализовать методы:
   public function getRouteKey(): string; //название маршрута (используется как основной топик)
   public function getSyncedAttributes(): array; // подготовленные данные к отправке в топик
   public function getTopics(): array; //дополнительные топики

где RouteKey должен определить название назначение сущности, SyncedAttributes должне вернуть массив данных передаваемый для обмена, Topics - набор топиков которые мы будем использовать для трансфера дополнительно

Полный пример

class User implements SyncedModelInterface
{
    use Synced;

    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);
        $this->registerSyncedListeners();
    }
    /**
     * route key of model
     */
    public function getRouteKey(): string
    {
        return 'user';
    }

    /**
     * prepare attributes to recieve
     */
    public function getSyncedAttributes(): array
    {
        return $this->toArray();
    }

    /**
     * additional topics 
     */
    public function getTopics(): array
    {
        return [];
    }
}

Добавление consumer для чтения изменений

  1. Для получения изменений на стороне клиента необходимо реализовать класс репозитория с интерфейсом SyncedRepositoryInterface:
public function createByKafka(KafkaPublishData $data);
public function updateByKafka(KafkaPublishData $data);
public function deleteByKafka(KafkaPublishData $data);

createByKafka - создание записи updateByKafka - обновление deleteByKafka - удаление

и сконфигурировать репозитории в файле synced.php:

    'repositories' => [
        'product' => 'App\Modules\Products\Repositories\ProductRepository',
        'organization' => 'App\Modules\Organizations\Repositories\OrganizationRepository',
        'application' => 'App\Modules\Applications\Repositories\ApplicationRepository',
    ],

Далее, достаточно просто, запустить коньсьюмер командой:

php artisan synced:consume:entity

  • название команды можно изменить в synced.php в параметре command-signature

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: Unknown
  • 更新时间: 2023-08-08