Kernel Memory 入门系列:异步管道
Kernel Memory 入门系列:异步管道
前面所介绍的处理流程都是基于同步管道的,即文档导入的时候,会等到文档处理完成之后才会返回。
但是在实际的应用中,文档很多,而且文档的处理时间也不确定,如果采用同步的方式,那么就会导致整个流程的处理时间过长,也会导致整个流程的阻塞。因此,我们需要一种异步的方式来处理这种情况。
注册消息队列
当我们使用异步管道的时候,需要先注册消息队列,Kernel Memory中默认提供了几种消息队列的实现,包括:
- RabbitMQ
- Azure Queue
- Simple Queue (file based, for testing)
这里以Simple Queue为例,在构建Kernel Memory的时候,可以通过WithSimpleQueuesPipeline方法来注册Simple Queue。
var _ = new KernelMemoryBuilder(appBuilder.Services)
//...
.WithSimpleQueuesPipeline() // <- register simple queue
.Build();
默认注册消息队列之后,处理流程就会以后台异步的方式进行处理。
后台任务
使用了异步队列之后,自定义的处理流程就注册方法就需要发生一些改变。
Kernel Memory提供的方式是将所有的异步处理流程都注册为HostedService, 也就是后台任务。
当注册自定义的处理流程的时候,就需要调用AddHandlerAsHostedService方法。
builder.Services.AddHandlerAsHostedService<MyHandler>("my_step");
注册好的后台任务会监听消息队列,当有消息到达的时候,就会触发对应的处理流程。
其余的导入、自定义处理流程和同步管道的方式一样。
构建异步处理服务
通过分布式的文件存储、向量存储和消息队列服务,就可以将文件的导入和处理流程进行分离,从而实现异步的处理流程。
participant Client as client
participant Memory as Kernel Memory
participant ContentStorage as content Storage
participant Queue as message queue
participant HostedService as hosted service
Client->>Memory: ImportDocumentAsync
Memory->>ContentStorage: Save document
Memory->>Queue: Send message
Memory->>Client: Return documentId
Queue->>HostedService: Receive message
ContentStorage->>HostedService: Get document
HostedService->>HostedService: Run pipeline
Client->>Memory: GetDocumentStatusAsync
ContentStorage->>Memory: Get document Status
Memory->>Client: Return document status
整体的处理流程如下:
- 文件导入后,会保存到分布式的文件存储中,同时会发送消息到消息队列中。
- 后台任务会监听消息队列,当有消息到达的时候,就会触发对应的处理流程。
- 客户端可以通过
GetDocumentStatusAsync方法来获取文档的处理状态。
由此就可以实现异步的处理流程。
Kernel Memory 入门系列:异步管道的更多相关文章
- Semantic Kernel 入门系列:🥑Memory内存
了解的运作原理之后,就可以开始使用Semantic Kernel来制作应用了. Semantic Kernel将embedding的功能封装到了Memory中,用来存储上下文信息,就好像电脑的内存一样 ...
- 快速入门系列--WebAPI--03框架你值得拥有
接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...
- 快速入门系列--WebAPI--01基础
ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...
- [转]快速入门系列--WebAPI--01基础
本文转自:http://www.cnblogs.com/wanliwang01/p/aspnet_webapi_base01.html ASP.NET MVC和WebAPI已经是.NET Web部分的 ...
- linux入门系列12--磁盘管理之分区、格式化与挂载
前面系列文章讲解了VI编辑器.常用命令.防火墙及网络服务管理,本篇将讲解磁盘管理相关知识. 本文将会介绍大量的Linux命令,其中有一部分在"linux入门系列5--新手必会的linux命令 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- 快速入门系列--WebAPI--04在老版本MVC4下的调整
WebAPI是建立在MVC和WCF的基础上的,原来微软老是喜欢封装的很多,这次终于愿意将http编程模型的相关细节暴露给我们了.在之前的介绍中,基本上都基于.NET 4.5之后版本,其System.N ...
- 快速入门系列--MVC--01概述
虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...
- 快速入门系列--MVC--02路由
现在补上URL路由的学习,至于蒋老师自建的MVC小引擎和相关案例就放在论文提交后再实践咯.通过ASP.NET的路由系统,可以完成请求URL与物理文件的分离,其优点是:灵活性.可读性.SEO优化.接下来 ...
随机推荐
- 使用shuffle sharding增加容错性
使用shuffle sharding增加容错性 最近在看kubernetes的API Priority and Fairness,它使用shuffle sharding来为请求选择处理队列,以此防止高 ...
- Solution -「CF 1096E」The Top Scorer
Description Link. 小明在打比赛,包括小明自己一共有 \(p\) 名选手参赛,每个人的得分是一个非负整数.最后的冠军是得分最高的人,如果得分最高的人有多个,就等概率从这些人中选一个当冠 ...
- .NET静态代码织入——肉夹馍(Rougamo)发布2.0
肉夹馍(https://github.com/inversionhourglass/Rougamo)通过静态代码织入方式实现AOP的组件,其主要特点是在编译时完成AOP代码织入,相比动态代理可以减少应 ...
- OI-note
版权声明:仅供学习. 持续更新中...也算是个人学习的监督与激励吧. OI路漫漫,且行且珍惜. OI太颓了,模拟赛都打不动,班级全是大佬. 算法综合 \(Algorithm\) 杂题综合 Index ...
- node(1)
1.新建http.js //node搭建http服务器 let http=require('http'); //使用http建立服务请求 http.createServer(function(requ ...
- 关于CAS等原子操作,说点别人没说的
Java中提供了原子操作,可以简单看一下AtomicInteger类中的一个典型的原子操作incrementAndGet(),表示对原子整数变量进行加操作,并返回新的值.实现如下: public cl ...
- [C++]二叉链-二叉树存储
二叉链存二叉树 预备知识 指针的熟练掌握 Bolg template模板的知识 Bolg 二叉树的基本知识 感谢: 代码参考:CSDN博主「云雨澄枫」的原创文章 链接 代码解析 结构体 BiNode ...
- 殷浩详解DD系列
第五讲:https://blog.csdn.net/Taobaojishu/article/details/115911833 内部有1-4讲链接
- 飞码LowCode前端技术:如何便捷配置出页面
简介 飞码是京东科技平台研发部研发的低代码产品,可使营销运营域下web页面快速搭建.本文将从三个方面来讲解如何便捷配置出页面,第一部分从数据.事件.业务支持三个方面进行分析,第二部分从模板与页面收藏与 ...
- excel对比两个文档,判断范围内的取值是否在另一个列表内存在(vlookup函数的使用)
背景: sheet1表为原始数据: sheet2表为新的数据副本, 目标是查询sheet2列表中是否存在sheet1表的数据,并且标记出来,且获取sheet2列表的一些数据至sheet1列表中,补充D ...