aldidigitalservices / lean-publisher
Spryker 的轻量级出版模块
Requires
- spryker/event: ^2.9
- spryker/kernel: ^3.65
- spryker/log: ^3.13
- spryker/propel: ^3.34
- spryker/search: ^8.19
- spryker/storage: ^3.18
- spryker/synchronization: ^1.13
- spryker/util-encoding: ^2.1
This package is auto-updated.
Last update: 2024-09-14 18:53:20 UTC
README
描述
Lean Publisher 是一种基于 sprykers "发布 & 同步" 流程(https://docs.spryker.com/docs/scos/dev/back-end-development/data-manipulation/data-publishing/publish-and-synchronization.html)的发布流程。
此流程的目标是在以前端为中心的数据存储(如 Redis 和 Elasticsearch)中提供数据。
Lean Publisher 旨在与 spryker 系统一起使用。
优点
- Lean publisher 集中了所有写入操作,因此连接的模块不需要考虑批量发布
- Redis 和 Elasticsearch 中的同步是同步发生的 - 防止数据存储不同步
- 队列、事件和消息的数量大幅减少,从而提高了高吞吐量环境中的 RabbitMQ 性能
- 事件映射得到改进并集中在一个地方。使发布者进程的连接更容易理解
- 为实施模块提供指导结构,因此发布的方法不会太多样化
安装
composer require ALDIDigitalservices/lean-publisher
集成
config_default.php
在 config_default.php 中将 "ALDIDigitalServices" 添加到您的 CORE_NAMESPACES
$config[KernelConstants::CORE_NAMESPACES] = [ ... 'ALDIDigitalServices', ... ];
控制台
在 src/Pyz/Zed/Console/ConsoleDependencyProvider.php
中请注册
[...] new LeanPublisherResynchronizationConsole(), [...]
可用命令
docker/sdk console lean-publisher:sync $RESOURCE $IDS
其中 $RESOURCE 是您要发布的资源
而 $IDS 是要发布的实体 ID 列表,以逗号分隔
事件
在 src/Pyz/Zed/Event/EventDependencyProvider.php
中注册
[...] $eventSubscriberCollection->add(new LeanPublisherEventSubscriber()); [...]
将您的模块连接到 Lean Publisher
如果您想将实体连接到 Lean Publisher,您需要遵循以下步骤
步骤 1:创建您的发布模块
我们建议以 "<ENTITY_NAME>Publish" 开头创建一个模块。例如 CategoryPublish,MerchantPublish 等。
步骤 2:创建一个新的队列 + 重试队列
在 src/Pyz/Zed/Queue/QueueDependencyProvider.php
中使用 LeanPublisherQueueMessageProcessorPlugin
[...] <ENTITY_NAME>PublishConfig::PUBLISH_MY_ENTITY_QUEUE_NAME => new LeanPublisherQueueMessageProcessorPlugin(), <ENTITY_NAME>PublishConfig::PUBLISH_MY_ENTITY_RETRY_QUEUE_NAME => new EventRetryQueueMessageProcessorPlugin() [...]
步骤 3:在
在 src/Pyz/Client/RabbitMq/RabbitMqConfig.php
中添加
[...] <ENTITY_NAME>PublishConfig::PUBLISH_<MY_ENTITY>_QUEUE_NAME => [ static::ROUTING_KEY_RETRY => <ENTITY_NAME>PublishConfigConfig::PUBLISH_<ENTITY_NAME>_RETRY_QUEUE_NAME, static::ROUTING_KEY_ERROR => <ENTITY_NAME>PublishConfigConfig::PUBLISH_<ENTITY_NAME>_ERROR_QUEUE_NAME, ], [...]
通过控制台命令设置新注册的队列。 docker/sdk console queue:setup
步骤 4:创建一个遵循 Lean Publisher 规范的数据库表
<?xml version="1.0"?> <database xmlns="spryker:schema-01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="zed" xsi:schemaLocation="spryker:schema-01 https://static.spryker.com/schema-01.xsd" namespace="Orm\Zed\<MyModule>\Persistence" package="src.Orm.Zed.<MyModule>.Persistence"> <table name="MY_ENTITY_publish" identifierQuoting="true"> <column name="id_MY_ENTITY_publish" required="true" type="INTEGER" autoIncrement="true" primaryKey="true"/> <column name="reference" required="true" type="VARCHAR" size="255"/> <column name="key_search" type="VARCHAR" size="255"/> <column name="key_storage" type="VARCHAR" size="255"/> <column name="data_search" type="LONGVARCHAR"/> <column name="data_storage" type="LONGVARCHAR"/> <column name="store" type="VARCHAR" size="128" required="true"/> <index name="MY_ENTITY_publish-reference"> <index-column name="reference"/> </index> <unique name="MY_ENTITY_publish-unique-key_storage"> <unique-column name="key_storage"/> </unique> <unique name="MY_ENTITY_publish-unique-key_search"> <unique-column name="key_search"/> </unique> <id-method-parameter value="id_MY_ENTITY_publish_pk_seq"/> <behavior name="timestampable"/> </table> </database>
通过控制台命令创建新表
docker/sdk console propel:schema:copy && docker/sdk console propel:model:build && docker/sdk console propel:diff && docker/sdk console propel:migrate && docker/sdk console transfer:entity:generate
步骤 5:创建一个实现 Lean Publisher 接口的 EventHandler 插件
步骤 6:注册 EventHandler
在 src/Pyz/Zed/LeanPublisher/LeanPublisherDependencyProvider.php::getEventHandlerPlugins()
return [ [...] <ENTITY_NAME>PublishConfig::PUBLISH_<ENTITY_NAME>_QUEUE_NAME => new <ENTITY_NAME>PublishEventHandlerPlugin(), [...] ];
步骤 7:创建并注册 PublisherTriggerPlugin
创建一个实现 两者 PublisherTriggerPluginInterface 和 LeanPublisherTriggerPluginInterface 的 PublishTriggerPlugin,并在 \Pyz\Zed\Publisher\PublisherDependencyProvider::getPublisherTriggerPlugins
中设置它
return [ [...] new <ENTITY_NAME>PublishPublisherTriggerPlugin(), [...] ];
步骤 8:设置处理事件的作业
根据您的设置,您可能需要添加 jenkins 作业或其他作业来处理来自您的 publish.ENTITY_NAME
队列的消息