You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EventStore连续投影如何按部分流匹配输出到用户对应结果流

EventStore 连续投影按用户分流输出配置方法

核心问题是options中写死了固定的resultStreamName,导致所有分区计算结果输出到同一个流,无法按用户维度拆分。以下是两种符合需求的实现方案:


方案1:输出到独立的user-{username}-result结果流

fromCategory('user')会自动将user-前缀后的流名部分作为分区键(例如user-admin的分区键为admin),EventStore v5的连续投影支持在resultStreamName中使用{partition}占位符自动拼接分区值,直接修改配置即可:

options({
    resultStreamName: "user-{partition}-result",
    $includeLinks: true,
    reorderEvents: false,
    processingLag: 500
})

fromCategory('user')
    .when({
        $init: function() {
            return {
                logins: 0,
            }
        },
        login: function(state, event) {
            state.logins += 1;
        },
    })
    .outputState()

注意:创建连续投影时需要开启**Emit enabled(允许发射事件)**权限,否则投影无法写入输出流。


方案2:直接在原user-{username}流写入result类型事件

如果不需要生成独立结果流,可以去掉全局resultStreamName配置,在事件处理逻辑中调用emit方法手动向对应源流写入结果事件:

options({
    $includeLinks: true,
    reorderEvents: false,
    processingLag: 500
})

fromCategory('user')
    .when({
        $init: function() {
            return {
                logins: 0,
            }
        },
        login: function(state, event) {
            state.logins += 1;
            // 参数依次为:目标流名、事件类型、事件数据、元数据
            emit(event.streamId, "result", state, event.metadata)
        },
    })

补充说明

  • fromStreamsMatching本身仅支持连续投影,一次性投影无法持续监听匹配新增流,你当前场景用fromCategory处理固定前缀的流是性能更优的选择,无需替换方法。
  • 投影类型选择Continuous后,确认开启事件写入权限,上述配置即可正常持续运行,无需额外调整其他参数。

内容的提问来源于stack exchange,提问作者maria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:45:44