自定义 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: 包含 oldnew 对象,表示变更前后节点的属性。如果节点在变更前后不存在,则这些值可能为 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
}
© . All rights reserved.