idynsys/synced-module
此包最新版本(v0.1.4)没有提供许可证信息。
同步模型模块
v0.1.4
2023-10-01 19:33 UTC
Requires
- php: ^8.0
- ext-json: *
- ext-rdkafka: *
- mateusjunges/laravel-kafka: ^1.10
Requires (Dev)
- symfony/var-dumper: 5.4.x-dev
README
安装
使用composer进行安装
composer req idynsys/synced-module
-
- 如果遇到依赖问题,需要使用-w选项:
composer req idynsys/synced-module -W
- 为了使用此包,需要安装ext-kafka
- 如果遇到依赖问题,需要使用-w选项:
安装(通用)
-
需要添加到app.php中
Ids\Modules\Synced\Providers\SyncedServiceProvider::class
-
添加配置文件
php artisan vendor:publish --tag=synced-config
-
然后运行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,需要设置共享网络)
添加模型以发送到kafka
- 为了添加模型,需要
- 添加SyncedModelInterface接口和特性(用于跟踪模型变化)
- 在构造函数中注册事件
- 实现方法
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 [];
}
}
添加消费者以读取更改
- 为了在客户端接收更改,需要实现一个具有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
参数更改命令名称