1

我正在研究 Atom 提要,将其作为我们组织内部 REST API 的一部分来分发事件数据的一种方式。我可以控制提要并确保:

  • 有一个“head”提要,其中包含按时间排序的事件,如果提要发生变化(以及短缓存标头),etag 会更新。
  • 有“存档”提要包含具有固定 etag(和长缓存标头)的较旧事件。
  • 事件带有时间戳且不可变,即它们发生并且无法更改。

问题是,消费者必须记住什么才能确保随时与最新数据同步,而不需要对事件进行双重处理?

  1. 它处理的最后一个 etag?
  2. 它处理的最后一个事件的时间戳?

我想它需要两者?etag 有效地询问提要是否有任何更改(使用 HTTP If-None-Match),如果是,则使用日期戳仅应用来自已更新提要但尚未处理的更改...

这个问题与 REST 或用于使用提要的技术无关。例如,它适用于任何编写代码以使用基于 Atom 的 RSS 提要阅读器的人。

更新

考虑一下 - 一些事件可能具有相同的时间戳,因为它们同时被批量“检测”。如果消费者在处理具有相同时间戳的批次中途死亡,那么消费者依赖成功处理的最后一个事件的时间戳可能会很尴尬......这就是我讨厌时间戳的原因!

在这种情况下,提要是否需要为消费者必须记住的每个事件发送一个 id?那个 id 不是必须增加到永恒,并且永远不会被重置吗?有哪些替代方案?

4

1 回答 1

1

您的事件都应该带有唯一的 ID。客户端需要跟踪这些 ID,并且足以防止双重处理。

在这种情况下,提要是否需要为消费者必须记住的每个事件发送一个 id?

是的。atom:entry需要一个唯一atom:id的。如果您的事件是不可变的,那么 ID 的唯一性就足够了。通常,条目不需要是不可变的。atom:updated包含最后一个重大变化:

以发布者认为重要的方式修改条目或提要的最近时刻

因此,一般客户需要考虑 和idupdated

于 2014-09-07T08:33:02.537 回答