我正在研究Atom提要,作为将事件数据作为我们组织的内部REST API的一部分进行分发的一种方式。我可以控制Feed并确保:
问题是,消费者必须记得在任何时候确保与最新数据同步,没有事件的双重处理?
我想它需要两者兼而有之? etag有效地询问Feed是否有任何更改(使用HTTP If-None-Match),如果是,则使用日期戳仅应用已更新的Feed中的更改已经处理......
问题与REST或用于使用Feed的技术无关。例如,它适用于编写代码以使用基于Atom的RSS提要阅读器的任何人。
更新
考虑一下 - 某些事件可能具有相同的时间戳,因为它们会被检测到"同时分批进行。然后让消费者依赖成功处理的最后一个事件的时间戳可能会很尴尬,以防它的处理在处理具有相同时间戳的批处理中途中断...这就是我讨厌时间戳的原因!
在这种情况下,Feed是否需要为消费者必须记住的每个事件发送一个id?那个id不会增加到永恒,永远不会被重置吗?有哪些替代方案?
答案 0 :(得分:1)
您的活动都应带有唯一的ID。客户需要跟踪这些ID,并且足以防止双重处理。
在这种情况下,Feed是否需要为消费者必须记住的每个事件发送一个id?
是。 atom:entry
必须具有唯一的atom:id
。如果您的事件是不可变的,则ID的唯一性就足够了。通常,条目不需要是不可变的。 atom:updated
包含最后一次重大更改:
最多 在某种程度上修改条目或订阅源的最近时刻 出版商认为重要
因此,一般客户需要考虑id
和updated
对。