FUzgsgrS9e 发表于 2025-2-15 21:53:06

Drasi Reactions SDK

Drasi Reactions SDK 是一个跨语言的开发工具包,用于实现和处理 Drasi 平台的 Reactions(反应器)功能。该 SDK 目前支持三种主流编程语言:JavaScript/TypeScript、Python 和 .NET。
主要功能和特点:

[*]核心功能:

[*]处理来自 Continuous Query(持续查询)的变更事件(ChangeEvent)
[*]处理控制事件(ControlEvent)
[*]支持查询配置的解析和管理
[*]提供事件订阅和处理机制

[*]主要事件类型:

[*]ChangeEvent(变更事件):包含查询结果的添加、删除和更新信息
[*]ControlEvent(控制事件):处理启动、停止等控制信号

[*]支持的语言实现:
JavaScript/TypeScript 版本:


import { DrasiReaction, ChangeEvent } from '@drasi/reaction-sdk';let myReaction = new DrasiReaction(async (event: ChangeEvent) => {    console.log(`Received change sequence: ${event.sequence} for query ${event.queryId}`);    // 处理添加的结果    for (let added of event.addedResults) {      console.log(`Added result: ${JSON.stringify(added)}`);    }    // 处理删除的结果    for (let deleted of event.deletedResults) {      console.log(`Removed result: ${JSON.stringify(deleted)}`);    }    // 处理更新的结果    for (let updated of event.updatedResults) {      console.log(`Updated result - before: ${JSON.stringify(updated.before)}, after: ${JSON.stringify(updated.after)}`);    }});myReaction.start();
Python 版本:


from drasi.reaction.models.ChangeEvent import ChangeEventfrom drasi.reaction.sdk import DrasiReactionasync def change_event(event: ChangeEvent, query_configs: dict | None = None):    print(f"Received change sequence {event.sequence} for query {event.queryId}")    if event.addedResults:      print(f"Added result: {event.addedResults}")    if event.deletedResults:      print(f"Removed result: {event.deletedResults}")    if event.updatedResults:      print(f"Updated result - before: {event.updatedResults.before}, after {event.updatedResults.after}")reaction = DrasiReaction(on_change_event=change_event)reaction.start()
.NET 版本:


var reaction = new ReactionBuilder()    .UseChangeEventHandler(async (evt, queryConfig) => {      Console.WriteLine($"Received change event from query {evt.QueryId} sequence {evt.Sequence}");                foreach (var item in evt.AddedResults)            Console.WriteLine($"Added result: {item}");      foreach (var item in evt.UpdatedResults)            Console.WriteLine($"Updated result, before {item.Before}, after {item.After}");      foreach (var item in evt.DeletedResults)            Console.WriteLine($"Deleted result: {item}");    })    .Build();await reaction.StartAsync();

[*]高级特性:

[*]支持自定义查询配置(Query Configuration)
[*]支持 YAML 配置文件解析
[*]提供配置值获取工具
[*]支持依赖注入(特别是在 .NET 版本中)
[*]提供完整的事件处理生命周期管理

[*]架构特点:

[*]基于 Dapr 实现发布订阅模式
[*]支持异步事件处理
[*]提供优雅的错误处理和日志记录
[*]支持配置文件热加载

SDK 的设计理念是提供一个简单但强大的接口,让开发者能够方便地实现和管理 Drasi 平台的反应器功能。无论使用哪种编程语言,都可以通过相似的 API 设计模式来处理事件和管理配置。
页: [1]
查看完整版本: Drasi Reactions SDK