是否可以通过其他 Stream 属性而不是 StreamId 来搜索流?例如,如果每个流的 Headers 中都有 CustomerId,我想搜索具有特定 CustomerId 的所有流。
4 回答
您可能正在尝试错误地使用事件存储。事件存储仅用于保存和读取已提交事件流以重建事件源聚合。实现提供了用于方便地实现基础设施关注点的标头,例如请求/响应相关 ID、审计、安全等。如果您发现自己在其中放置了业务属性(例如客户 ID),那么您可能需要按照 @eulerfx 的建议构建读取模型。
如果它是您要查找的 ID,那么您应该考虑将 CustomerID 设为该客户的实际事件流 ID。通过 ID 加载特定客户正是您期望事件存储执行的操作。
EventStore 现在有可以做你正在寻找的预测。请参阅此博客了解详细信息
http://geteventstore.com/blog/20130227/projections-6-an-indexing-use-case/
尽管它可能不是查找某些内容的最有效方式,但如果您确实需要一个流列表以便您可以搜索它们或找到特定的流,则有一个 $streams 系统投影,但需要先启用它才能使用它使用类似这样的PowerShell:
uri$ = http://${EventStoreIP}:${EventStoreHttpPort}/projection/${projection}/command/enable
$result = Invoke-WebRequest -Method Post -Uri $uri -UseBasicParsing -TimeoutSec 90 -Headers @{
Authorization = Get-BasicAuthCredentials
}
其中 $projection 是“$streams”。另请查看可以以相同方式启用的其他系统投影,这可能会更准确地提供您需要的内容,这些内容在此处记录:https ://eventstore.org/docs/projections/system-projections/