如何仅通过一个 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 只有一个事件。

你的结果是一个只包含一项的可迭代对象——最新事件

Reading from a stream - reading backwards