过滤事件流:用自定义通道优化平台事件交付

用自定义通道和过滤表达式优化 Salesforce 平台事件交付,只把订阅者真正需要的事件流式传给他们。本文带你端到端构建流过滤方案:用 Tooling API 创建 PlatformEventChannel 自定义通道、定义 Order_Event__e 平台事件、给通道成员加 SOQL 过滤表达式(City=旧金山 AND Amount<1000)、安装 Streaming Monitor 订阅、用 REST API Composite resource 发布事件,并验证只有匹配事件被投递——把处理量从 30000 降到 5000,优化事件驱动架构的效率。...

📅 2026/10/5 ✍️ ponybai 🏷️ salesforce, developer, integration, headless

一、为订单事件创建自定义通道

slide_2

本动手项目用 Salesforce Platform Events 和自定义通道构建完整的流过滤方案。本单元从流过滤的概念讲起,然后用 Tooling API 创建自定义平台事件通道。

项目概览与学习目标

slide_3

本项目构建完整的流过滤方案:用 Tooling API 创建自定义通道、定义 Order_Event__e 平台事件、用 Tooling API 创建带过滤表达式的通道成员、安装 Streaming Monitor 应用、订阅通道、用 REST API 发布订单事件、验证过滤后的事件被接收。最终你会有一个可用的过滤事件流——订阅者只收到匹配你条件的事件。

开始之前

slide_4

开始前推荐熟悉平台事件和 REST API。推荐模块:Platform Events Basics、Platform API Basics(REST API 单元)。本项目用 Postman 做 REST API 调用。环境:Trailhead Playground、已认证连接的 Postman、forked 的 Salesforce Platform APIs collection。

用自定义通道过滤事件流

slide_5

为什么要过滤事件流?订阅者应用用更少的量更快地处理事件;不超事件交付配额;每个应用只收到它要处理的事件。

场景:每个地点每天 30000 个订单事件,只有 5000 个是旧金山的。订阅 SF 应用到一个过滤了 SF 的通道 → 应用处理 5000 个而非 30000 个,计入事件交付用量的是 5000 而非 30000。

过滤原理:事件通道把 Platform Events 或 Change Data Capture 事件流式传给 Pub/Sub API 和 Streaming API 客户端;在通道成员里加过滤表达式(基于 SOQL,指定要过滤的事件字段和值);只投递匹配的事件消息。适用于自定义平台事件 + Change Data Capture 事件。

创建自定义通道

slide_6

配置流过滤前,用 PlatformEventChannel 创建自定义平台事件通道。两种 API:Tooling API(本项目用)和 Metadata API。通道类型:"event"(引用自定义平台事件;用 "data" 则引用 Change Data Capture 事件)。

在 Postman 中通过 Tooling API 创建:POST 到 PlatformEventChannel 端点,JSON body 指定 FullName(Order_Filtered_Channel__chn)、Metadata.channelType(event)和 label。期望响应 201 Created 并返回通道 ID。

启动 Trailhead Playground

slide_7

这是动手项目,需在自己的 Trailhead Playground 完成:① 登录 Trailhead 点击 Launch ② 连接 Postman(完成 Quick Start、Authorization 标签获取访问令牌、Variables 标签粘贴 instance URL)③ 测试连接:GET Limits → Send → 200 OK ④ 通过 Tooling API 创建自定义通道:展开 Event Platform → Custom Channels → Platform Event → Create channel → 替换 Body → Send → 201 Created。

资源(单元一)

slide_8

继续学习:Trailhead「Quick Start — Connect Postman to Salesforce」、Tooling API 开发者指南「PlatformEventChannel」、Platform Events 开发者指南「Filter Your Stream with Custom Channels」、开发者指南「Pub/Sub API」「Streaming API」。下一步:定义 Order_Event 平台事件并给通道成员加过滤表达式。

二、添加订单事件与过滤表达式到通道成员

slide_9

第二单元定义带自定义字段的 Order_Event__e 平台事件,然后创建通道成员,把事件链接到通道并指定过滤表达式——只有 City 为旧金山且 Amount 小于 1000 的事件才被投递。

定义订单平台事件

slide_10

加通道成员前,先定义它引用的平台事件。Setup → Platform Events → New Platform Event:Label「Order Event」。创建三个自定义字段:Order Number(Text 10)、City(Text 50)、Amount(Number 16,小数 2 位)。这个平台事件代表一个订单的编号、目标城市和金额——正是过滤表达式要评估的字段。

通道成员中的过滤表达式

slide_11

通道成员(Channel Member)指定:该通道上流式传输的事件实体、用于过滤事件流的过滤表达式。在 Tooling API 中由 PlatformEventChannelMember 表示。一个通道可包含多个成员,每个引用不同的事件实体。

过滤表达式基于 SOQL,支持 SOQL 运算符和字段类型的子集,可用逻辑运算符(AND、OR)连接一个或多个字段表达式。本项目的过滤表达式:City__c='San Francisco' AND Amount__c<1000——只有 City 为旧金山且 Amount 小于 1000 的事件才被投递。注意字段名带 __c 后缀。

通过 Tooling API 创建通道成员

slide_12

在 Postman 中发起 Tooling API 调用创建通道成员:展开 Event Platform → Custom Channels → Platform Event → Create channel member,替换 Body:

{
  "FullName": "Order_Filtered_Channel_chn_Order_Event_e",
  "Metadata": {
    "eventChannel": "Order_Filtered_Channel__chn",
    "filterExpression": "City__c='San Francisco' AND Amount__c<1000",
    "selectedEntity": "Order_Event__e"
  }
}

Send 后验证 201 Created,响应含新通道成员 ID。你的过滤通道现在已激活——任何订阅者只会收到匹配过滤表达式的事件。

资源(单元二)

slide_13

继续学习:Platform Events 开发者指南「Filter Your Stream with Custom Channels」、Tooling API 开发者指南「PlatformEventChannel」「PlatformEventChannelMember」。下一步:用 AgentExchange 的 Streaming Monitor 应用订阅过滤通道。

三、订阅通道

slide_14

第三单元安装并订阅:从 AgentExchange 安装 Streaming Monitor 应用,订阅自定义通道,实时监控只匹配过滤条件的事件消息。

接收过滤后的事件流

slide_15

过滤配置好后,该订阅了。目标:只接收匹配过滤表达式(City=旧金山 且 Amount<1000)的订单事件。订阅需要一个能连接 Salesforce 事件总线的客户端——本项目用 Streaming Monitor 应用(Salesforce Labs 免费工具,可上 AgentExchange)。它提供:收到事件的可视化时间线、点击查看事件消息详情、支持自定义通道和平台事件、回放能力。

从 AgentExchange 安装 Streaming Monitor

slide_16

安装 Streaming Monitor 应用(免费的 Salesforce Labs 工具):Package ID 04tJ5000000gQFx,Install for Admins Only。如果你的 playground 有「Install a Package」标签:点击 → 粘贴 Package ID → Install → 选 Install for Admins Only。否则在 App Launcher 找 Playground Starter,或用 AgentExchange 的安装链接。安装后会看到确认页并收到邮件。替代工具:empApi Lightning 组件或任意 CometD/Pub/Sub API 客户端。Streaming Monitor 由 Salesforce Labs 支持(非官方支持)。

订阅通道并接收过滤后的事件流

slide_17

用 Streaming Monitor 订阅含过滤的通道:① App Launcher → 搜索「Streaming Monitor」② Actions → Subscribe to a channel ③ Event type:Custom Channel - Platform event ④ Channel name:/event/Order_Filtered_Channel__chn ⑤ Subscribe。

重要:保持 Streaming Monitor 标签打开——事件消息以圆点实时显示,关闭标签会清空视图(消息不保存),误关可用 replay 找回。订阅现在已上线,任何发布到 Order_Event__e 且匹配过滤的事件会作为圆点出现在时间线上。

资源(单元三)

slide_18

继续学习:AgentExchange「Streaming Monitor」、GitHub「streaming-monitor」仓库、组件参考「Emp API Lightning Web Component」。下一步:发布订单事件并验证只有匹配的事件被投递到过滤通道。

四、发布订单事件并接收过滤流

slide_19

最终单元:用 REST API Composite resource 发布三个不同城市和金额的平台事件,验证只有匹配过滤表达式的那个被投递,确认流过滤管道端到端工作。

发布订单事件

slide_20

用 REST API Composite resource 发布三个平台事件——一次请求、多个事件。测试数据:

  • 事件 1:订单 #99,旧金山,$5,205
  • 事件 2:订单 #100,旧金山,$120
  • 事件 3:订单 #101,纽约,$65

用 Postman:Event Platform → Publish Platform Events → Publish multiple events。JSON body 含 compositeRequest,三个 POST 各发布一个 Order_Event__e 消息。期望响应 200 OK,三个子响应各返回 201 Created。

验证过滤后的事件流

slide_21

过滤表达式 City__c='San Francisco' AND Amount__c<1000 逐条评估:事件 1(SF+$5,205)→ 失败(Amount>1000);事件 2(SF+$120)→ 通过✓;事件 3(NY+$65)→ 失败(City≠旧金山)。只有事件 #2 应到达过滤通道。

在 Streaming Monitor 验证:切到 Streaming Monitor 标签 → 确认只有一个事件圆点 → 点击查看数据 → 字段匹配事件 #2(Order Number 100、San Francisco、Amount 120)。恰好收到一个事件——流过滤正常工作:5000 个而非 30000 个,高效、优化、完成。

资源(单元四)

slide_22

继续学习:REST API 开发者指南「Using Composite Resources」、Platform Events 开发者指南「Filter Your Stream with Custom Channels」「Platform Event Filters」。你已构建完整流过滤方案:自定义通道 → 平台事件 → 过滤表达式 → 订阅 → 发布事件 → 验证投递。恭喜完成项目!


文章来源:Trailhead - Filter Your Event Streams