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存储。