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 ChangeEvent
from drasi.reaction.sdk import DrasiReaction
async def change_event(event: ChangeEvent, query_configs: dict[str, Any] | 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[0].before}, after {event.updatedResults[0].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 设计模式来处理事件和管理配置。
Drasi Reactions SDK的更多相关文章
- Vector人工智能机器人SDK使用笔记
Cozmo是2016年推出的,2两年后的2018年Vector上市,具备语音助手和更多功能,元件数由300+升级到700+. Vector的SDK具体说明在:developer.anki.com/ve ...
- 配置android sdk 环境
1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/
- 阿里云直播 C# SDK 如何使用
阿里云直播SDK的坑 1.直播云没有单独的SDK,直播部分被封装在CDN的相关SDK当中. 2.针对SDK,没有相关Demo. 3.针对SDK,没有相关的文档说明. 4.针对SDK的说明,官网上的说明 ...
- 使用Visual Studio SDK制作GLSL词法着色插件
使用Visual Studio SDK制作GLSL词法着色插件 我们在Visual Studio上开发OpenGL ES项目时,避免不了写Shader.这时在vs里直接编辑shader就会显得很方便. ...
- iOS开发之App间账号共享与SDK封装
上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...
- Intel Media SDK H264 encoder GOP setting
1 I帧,P帧,B帧,IDR帧,NAL单元 I frame:帧内编码帧,又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随 ...
- Android SDK 在线更新镜像服务器资源
本文转自:http://blog.kuoruan.com/24.html.感谢原作者. 什么是Android SDK SDK:(software development kit)软件开发工具包.被软件 ...
- TYPESDK手游聚合SDK服务端设计思路与架构之二:服务端设计
在前一篇文中,我们对一个聚合SDK服务端所需要实现的功能作了简单的分析.通过两个主要场景的功能流程图,我们可以看到,作为多款游戏要适配多个渠道的统一请求转发中心,TYPESDK服务端主要需要实现的功能 ...
- TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析
TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...
- Android SDK 与API版本对应关系
Android SDK版本号 与 API Level 对应关系如下表: Code name Version API level (no code name) 1.0 API level 1 ( ...
随机推荐
- Winform TabControl动态添加TabPage
在Winform中,标签页是我们很难绕开的一个控件,而且,我们经常有动态添加标签页的需求. 这里介绍一个最简单的添加方法: 首先,我们把需要添加的内容做成UserControl,这样,我们就可以在添加 ...
- Winform解决跨线程更新UI的问题
最近又拿起了Winform的程序,由于要起socket server,所以需要起线程,这里就遇到了经典的跨线程UI调用的问题. 如果什么都不写,直接由线程更新UI,会报错:线程间操作无效. 这里的解决 ...
- bat隐藏窗口运行
在bat脚本开头添加: if "%1" == "h" goto begin mshta vbscript:createobject("wscript. ...
- 切换浏览器tab刷新实现
标签: js 缘起 最近在做一个活动需求,需求交互有跨项目,跳转到另一个项目里完成指定任务,再回来领取相应任务奖励,产品十分反感要求用户主动刷新浏览器才更新活动页的任务信息. 解决方案 方案1:如果项 ...
- Attribute application@label value=(xxx) from AndroidManifest.xml:8:16-37 is also present at [com.github.adrielcafe:AndroidAudioConverter:0.0.8] AndroidManifest.xml:11:18-50 value=(@string/app_name)
关于安卓编译错误Attribute application@label value=(xxx) from AndroidManifest.xml:8:16-37 is also present at ...
- SpringBoot项目请求路径中有正反斜杠的处理办法
在Application中添加静态代码块: //默认情况下Tomcat等服务器是拒绝url中带%2F或者%5C的URL,因为它们经浏览器解析之后就变成了/和\, // 服务器默认是拒绝访问的,所以需要 ...
- 永久告别mac屏幕涂层脱落
转载:https://www.feng.com/post/11380203 我从2011年开始使用Mac book pro电脑,到现在的2016款已经是第三台了,我从来都不会被涂层脱落这个问题困扰,我 ...
- UML之模型、包及包的版型(构造型)
包是UML模型的组织结构,也是UML项目的配置管理结构.包存在多个层级,除了顶层包,所有包隶属于一个且仅隶属于一个上层包.在项目不同阶段实际推进与配置过程中,通常以不同层级的包为单位进行check-i ...
- 前端之canvas实现电子签约完成线上签署功能
最近发现现在租房还是签合同,越来越多采用电子签约的方式进行,好处不用多说节约成本,节约时间.抱着好奇的心理,尝试自己动手实现一个电子签.原来并不复杂主要通过了canvas绘画能力进行实现的. 主要功能 ...
- G1原理—1.G1回收器的分区机制
大纲 1.G1垃圾回收器的分区(Region大小+G1分区+Region过大过小和计算) 2.Region大小的计算原理(先转字节然后确定2的n次幂再通过1左移n位) 3.新生代分区及自动扩展(新生代 ...