GetStream在不同标签Feed中生成重复Activity问题如何修复
问题根源
你使用的Stream Feed服务生成Activity ID的规则是默认基于actor、verb、object、time、foreign_id几个核心字段做哈希计算,你当前给不同标签生成的Activity除了target字段外,其他核心字段完全一致,系统会判定为同一条Activity,自然会出现ID相同、target字段冲突的问题。另外你的代码里actor字段的模板字符串写法存在错误,没有正确插入model.user的值。
修复方案
你需要给每个标签对应的Activity生成唯一的foreign_id,确保不同标签的Activity核心字段有差异,修改后的代码如下:
buildActivity = (model, obj) => { return { ...{ // 修复原模板字符串错误 actor: `user:${model.user}`, verb: 'is', object: `model:${model.id}`, foreign_id: `model:${model.id}`, time: model.createdAt.toDate(), }, ...(obj ? obj : {}) } } addActivitiesToTagFeed = async (model, tags) => { const promises = [] for(let i=0;i<tags.length;i++){ const tag = tags[i] const activity = buildActivity(model,{ target: `tag:${tag}`, // 给每个标签的Activity生成唯一的foreign_id foreign_id: `model:${model.id}:tag:${tag}` }) const feed = stream.feed('tag', tag) promises.push(feed.addActivity(activity)) } await Promise.all(promises) }
补充说明
- 调整后每个标签对应的Activity
foreign_id都带有对应标签标识,Stream会为每条Activity生成唯一的ID,不会再出现不同标签的Activity内容冲突的问题,tag_aggregated功能也能正常按标签聚合内容。 - 如果后续需要追溯同一内容关联的所有标签Activity,可以通过
model.id前缀匹配foreign_id批量查询。
内容的提问来源于stack exchange,提问作者fct
相关产品推荐
相关产品推荐

