我正在研究 Atom 提要,将其作为我们组织内部 REST API 的一部分来分发事件数据的一种方式。我可以控制提要并确保:
- 有一个“head”提要,其中包含按时间排序的事件,如果提要发生变化(以及短缓存标头),etag 会更新。
- 有“存档”提要包含具有固定 etag(和长缓存标头)的较旧事件。
- 事件带有时间戳且不可变,即它们发生并且无法更改。
问题是,消费者必须记住什么才能确保随时与最新数据同步,而不需要对事件进行双重处理?
- 它处理的最后一个 etag?
- 它处理的最后一个事件的时间戳?
我想它需要两者?etag 有效地询问提要是否有任何更改(使用 HTTP If-None-Match),如果是,则使用日期戳仅应用来自已更新提要但尚未处理的更改...
这个问题与 REST 或用于使用提要的技术无关。例如,它适用于任何编写代码以使用基于 Atom 的 RSS 提要阅读器的人。
更新
考虑一下 - 一些事件可能具有相同的时间戳,因为它们同时被批量“检测”。如果消费者在处理具有相同时间戳的批次中途死亡,那么消费者依赖成功处理的最后一个事件的时间戳可能会很尴尬......这就是我讨厌时间戳的原因!
在这种情况下,提要是否需要为消费者必须记住的每个事件发送一个 id?那个 id 不是必须增加到永恒,并且永远不会被重置吗?有哪些替代方案?