自定义 CDC 订阅
|
这是 GraphQL Library 7 版本的文档。对于长期支持 (LTS) 版本 5,请参考 GraphQL Library 5 LTS 版本。 |
Neo4j 的 GraphQL 订阅使用 变更数据捕获(CDC)。其行为可以通过传入 Neo4jGraphQLSubscriptionsCDCEngine 的实例来进行配置。
Neo4jGraphQLSubscriptionsCDCEngine
默认情况下,GraphQL 库使用传递给 Neo4jGraphQL 的相同驱动程序,每秒轮询一次事件。通过创建自定义的 Neo4jGraphQLSubscriptionsCDCEngine 实例可以更改此行为。
以下选项可传递给构造函数
-
driver:用于 CDC 查询的驱动程序。 -
pollTime:两次 CDC 查询之间的间隔(毫秒)。默认值为 1000 ms。请注意,轮询时间指的是一次请求结束到下一次请求开始之间的周期。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
}