eventsauce/message-repository-for-doctrine

Doctrine DBAL 3的消息存储库

1.2.1 2024-05-14 14:43 UTC

This package is auto-updated.

Last update: 2024-09-22 09:43:59 UTC


README

MessageRepository实现,使用Doctrine DBAL进行事件持久化。

使用方法

use EventSauce\MessageRepository\DoctrineMessageRepository\DoctrineUuidV4MessageRepository;
use EventSauce\MessageRepository\TableSchema\DefaultTableSchema;
use EventSauce\UuidEncoding\BinaryUuidEncoder;

$messageRepository = new DoctrineUuidV4MessageRepository(
    connection: $doctrineDbalConnection,
    tableName: $tableName,
    serializer: $eventSauceMessageSerializer,
    tableSchema: new DefaultTableSchema(), // optional
    uuidEncoder: new BinaryUuidEncoder(), // optional
);

表架构

TableSchema 允许在执行数据库操作时自定义表和列名,以及允许添加额外的头信息。

默认表架构

默认实现DefaultTableSchema使用以下列名

  • event_id 主键(文本/UUID)
  • aggregate_root_id 聚合根ID(文本/UUID)
  • version 聚合根版本(int)
  • payload 编码的事件负载(文本/JSON)

旧版表架构

对于从EventSauce 1.0之前版本升级的用户,存在一个LegacyTableSchema

  • event_id 主键(文本/UUID)
  • event_type 序列化的事件名称(文本)
  • aggregate_root_id 聚合根ID(文本/UUID)
  • aggregate_root_version 聚合根版本(int)
  • time_of_recording 事件被写入的时间(时间戳)
  • payload 编码的事件负载(文本/JSON)

自定义实现

自定义TableSchema的实现可以使用additionalColumns方法将其他Header值写入列,这对于索引很有用。

UUID编码器

UuidEncoder 允许自定义在写入数据库时如何将用于事件ID和聚合根ID的UUID转换为字符串。

二进制UUID编码器

UuidBinaryEncoder 使用$uuid->getBytes()编码UUID,生成UUID的二进制文本版本,应该用于数据库没有本机uuid类型的场景。

字符串UUID编码器

UuidStringEncoder 使用$uuid->toString()编码UUID,生成UUID的纯文本版本,应该用于数据库有uuid类型的场景。

自定义实现

可以根据需要使用自定义的UuidEncoder实现来优化UUID存储。