如何仅通过一个 HTTP 请求从事件存储流中获取最后一个事件?
How can I get the last event from an Event Store stream with only one HTTP request?
我能找到的所有 docs 似乎都建议我需要两个 http 请求来执行此操作:一个到流,给我一个 link 最后一个事件,然后一个跟随link.
这看起来很奇怪,有没有办法只通过一个请求就可以做到这一点?
关键字是'head',如git。所以最后一个活动是在 [url of the stream]/head
.
如果使用 .NET 客户端,您还可以使用反向读取 API
Task<StreamEventsSlice> ReadStreamEventsBackwardAsync(string stream, int start, int count, bool resolveLinkTos)
哪里
- 开始 - 通常如果您知道从哪个事件编号开始,但在这种情况下我们不知道,所以我们可以
StreamPosition.End
(-1) 从结束开始。
- 计数 - 要倒退的事件数
所以此代码将为您提供流中的最后一个事件(如果是投影,则启用 linkTos)
StreamEventsSlice slice = await Connection.ReadStreamEventsBackwardAsync("StreamName", StreamPosition.End, 1, true, creds);
如果您使用的是 EventStore gRPC 客户端,则为替代方案。
_client.ReadStreamAsync(Direction.Backwards, _streamName, StreamPosition.End, 1)
与 .NET 版本非常相似。您请求从流的末尾开始向后读取流,并且 return 只有一个事件。
你的结果是一个只包含一项的可迭代对象——最新事件
我能找到的所有 docs 似乎都建议我需要两个 http 请求来执行此操作:一个到流,给我一个 link 最后一个事件,然后一个跟随link.
这看起来很奇怪,有没有办法只通过一个请求就可以做到这一点?
关键字是'head',如git。所以最后一个活动是在 [url of the stream]/head
.
如果使用 .NET 客户端,您还可以使用反向读取 API
Task<StreamEventsSlice> ReadStreamEventsBackwardAsync(string stream, int start, int count, bool resolveLinkTos)
哪里
- 开始 - 通常如果您知道从哪个事件编号开始,但在这种情况下我们不知道,所以我们可以
StreamPosition.End
(-1) 从结束开始。 - 计数 - 要倒退的事件数
所以此代码将为您提供流中的最后一个事件(如果是投影,则启用 linkTos)
StreamEventsSlice slice = await Connection.ReadStreamEventsBackwardAsync("StreamName", StreamPosition.End, 1, true, creds);
如果您使用的是 EventStore gRPC 客户端,则为替代方案。
_client.ReadStreamAsync(Direction.Backwards, _streamName, StreamPosition.End, 1)
与 .NET 版本非常相似。您请求从流的末尾开始向后读取流,并且 return 只有一个事件。
你的结果是一个只包含一项的可迭代对象——最新事件