eventsauce / message-repository-for-doctrine
Doctrine DBAL 3的消息存储库
资助包维护!
frankdejonge
1.2.1
2024-05-14 14:43 UTC
Requires
- doctrine/dbal: ^3.1|^4.0
- eventsauce/eventsauce: ^3.0
- eventsauce/id-encoding: ^1.0
- eventsauce/message-repository-table-schema: ^1.0
- eventsauce/uuid-encoding: ^1.0
- ramsey/uuid: ^4.1
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存储。