【问题标题】:How can I get the last event from an Event Store stream with only one HTTP request?如何仅通过一个 HTTP 请求从 Event Store 流中获取最后一个事件?
【发布时间】:2018-04-26 17:32:45
【问题描述】:

我能找到的所有docs 似乎都表明我需要两个 http 请求来执行此操作:一个到流,给我一个指向最后一个事件的链接,然后一个跟随那个链接。

这似乎很奇怪,难道没有办法只用一个请求来做到这一点吗?

【问题讨论】:

  • 这是我正在研究的一个问题,您可以使用客户端 api 中的“SubscribeToStreamFrom”,但您仍然需要从流中获取最后一个事件。
  • @HomeForce 我刚发了这个就忘记更新了,抱歉!现在已经发布了答案。

标签: http stream event-stream eventstoredb


【解决方案1】:

如果使用 .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);

【讨论】:

    【解决方案2】:

    关键字是'head',比如git。所以最后一个事件是[url of the stream]/head。

    【讨论】:

      【解决方案3】:

      如果您使用 EventStore gRPC 客户端,则另一种选择。

      _client.ReadStreamAsync(Direction.Backwards, _streamName, StreamPosition.End, 1)
      

      非常类似于 .NET 版本。您请求从流的末尾开始向后读取流,并且只返回一个事件。

      你的结果是一个只包含一个项目的迭代 - 最新事件

      Reading from a stream - reading backwards

      【讨论】:

        猜你喜欢
        • 2022-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-02
        • 2010-11-05
        • 2018-02-16
        相关资源
        最近更新 更多