自定义 CDC 订阅
这是 GraphQL 库版本 7 的文档。对于长期支持 (LTS) 版本 5,请参阅 GraphQL 库版本 5 LTS。 |
GraphQL 订阅 Neo4j 使用 变更数据捕获 (CDC)。其行为可以通过传入 Neo4jGraphQLSubscriptionsCDCEngine
的实例进行配置。
Neo4jGraphQLSubscriptionsCDCEngine
默认情况下,GraphQL 库使用传递给 Neo4jGraphQL
的相同驱动程序每秒轮询事件。通过创建 Neo4jGraphQLSubscriptionsCDCEngine
的自定义实例可以更改此行为。
以下选项可以传递给构造函数:
-
driver
: 用于 CDC 查询的驱动程序。 -
pollTime
: 查询 CDC 之间的时间间隔,以毫秒为单位。默认为 1000 毫秒。请注意,轮询时间是上一个请求完成和下一个请求开始之间的间隔。CDC 事件触发订阅的实际时间还取决于您的网络。 -
queryConfig
: 一个包含要传递给 CDC 请求的驱动程序查询选项的对象。使用db
字段定义 CDC 的目标数据库。 -
onlyGraphQLEvents
: 默认情况下,订阅会捕获对数据库进行的所有更改。如果此标志设置为true
,则只有通过 GraphQL 进行的更改才会触发订阅。请注意,如果此标志设置为true
,则使用不同版本的@neo4j/graphql
进行的更改不会触发订阅。
例如
import { Neo4jGraphQL, Neo4jGraphQLSubscriptionsCDCEngine } from '@neo4j/graphql';
const engine = new Neo4jGraphQLSubscriptionsCDCEngine({
driver,
pollTime: 5000,
queryConfig: {
database: "neo4j",
},
onlyGraphQLEvents: true
})
const neoSchema = new Neo4jGraphQL({
typeDefs,
driver,
features: {
subscriptions: engine,
},
});
监听订阅事件
Neo4jGraphQLSubscriptionsCDCEngine
类公开了 events
属性,它是 EventEmitter 的一个实例,它为每个 CDC 事件发出一个事件。这对于将 CDC 事件转发到外部队列进行处理等场景非常有用。
通常建议直接使用 CDC,而不是通过 GraphQL 库进行事件监听。 |
要监听 GraphQL 订阅事件,请在 events
属性上使用 .on
方法
engine.events.on("create", (payload) => {
console.log("Node Created!", payload)
});
可以监听以下 CDC 触发的事件:
-
create
: 已创建节点。 -
update
: 已更新节点。 -
delete
: 已删除节点。
事件负载
每个事件都包含一个带有事件详细信息的 JSON 负载:
-
event
: 事件类型,与监听器事件名称匹配。 -
typename
: GraphQL 类型名称。 -
properties
: 包含old
和new
对象,表示变更前后节点的属性。如果节点在变更前后不存在,则这些值可能为undefined
。 -
id
: 节点 ID(未通过 GraphQL API 公开)。 -
timestamp
: 触发事件的变更的时间戳。
例如,节点创建事件如下所示:
{
event: 'create',
typename: 'Movie',
properties: { old: undefined, new: { title: 'The Matrix' } },
id: '4:70bade62-2121-4808-9348-3ab77859e164:510',
timestamp: 1739286926054
}