欢迎光临散文网 会员登陆 & 注册

SignalR+Hangfire 实现后台任务队列和实时通讯

2023-06-07 00:15 作者:单纯的饶同学  | 我要投稿

SignalR+Hangfire 实现后台任务队列和实时通讯


1.简介:

SignalR是一个.NET的开源框架,SignalR可使用Web Socket, Server Sent Events 和 Long Polling作为底层传输方式实现服务端和客户端的实时数据交互。

Hangfire是一个.NET的开源后台任务框架 提供统一的编程模型,以可靠的方式处理后台任务

2.目的:

通过SignalR+Hangfire,我们可以实现一些需要较长时间处理的任务,并在完成及时的通知前端处理结果。

3.以下是我使用SignalR+Hangfire的开发需求:

在net6 webapi的情况下,前端是vue+ts,我现在有个需要就是,我写了一个接口,是对接stable diffusion webui 文生图的接口,前端第一个人请求,返回图没有问题,
但是,此时在生成图的过程中,第二个人请求,我希望加入到一个队列或者别的方式 ,把这个请求放着,我处理完第一个请求之后继续处理第二个,并且告诉用户,前面有多少个任务需要等待?

我的开发环境,后端是.net7 前端vue3.0,下面是对应安装和使用教程:

1.Hangfire使用


1.安装nuget包


由于我使用的mysql,对应包为Hangfire.MySqlStorage,大家根据自己的数据库选择安装对应的包

2.添加Hangfire配置


Hangfire的数据是存在数据库中的,所以在添加配置时候要使用对应的数据库连接字符串。同时,在UseHangfireServer时,我使用了自定义的队列名称,并将同时执行的任务数设置为1,以实现任务队列中的任务唯一,且任务依次执行。

在program.cs中添加以下配置

1.添加Hangfire


代码内容:

2.应用Hangfire



代码内容:

3.数据库配置


配置完成,在使用时,数据库会生成Hangfire的工作表,如下:



4.Hangfire 控制面板

对应Hangfire 控制面板为 /hangfire

http://localhost:5122/hangfire

1.仪表盘


2.队列



5.代码中的应用

1.发起一个后台任务

2.后台任务方法

3.查询队列等待任务数

2.SignalR使用


1.后端SignalR使用


由于我使用的.net7,微软自带SignalR,我们使用时只需要添加引用

using Microsoft.AspNetCore.SignalR;

1.添加SignalR配置

在program.cs中添加以下配置

1.添加SignalR



代码内容:

// SignalR

services.AddSignalR();


2.配置SignalR hub



代码内容:


2.创建SignalR hub类

3.代码中的应用

1.依赖注入

通过依赖注入,在要使用的类中注入


2.发送消息

向全体发送

向指定客户端发送

2.前端SignalR使用


前端我用的是VUE+TS

1.安装SignalR包

通过命令使用 pnpm 安装 @microsoft/signalr

2.页面中引用@microsoft/signalr

3.创建一个useSignalR.ts

创建一个useSignalR.ts来专门处理SignalR消息,然后在需要用到的页面中引用即可。

代码内容:

4.页面中的使用

在需要使用signalR的页面引用useSignalR

3.案例:SignalR+Hangfire+StableDiffusionAPI 生成图片

Hangfire实现后台调用StableDiffusion web接口,然后通过SignalR将结果返回给前端。这样,对StableDiffusion web的性能要求很低。不会因为生成图片慢,导致http请求超时的情况。大大改善了前后端交互。

1.前端建立SignalR

跟上述页面中使用介绍的一样,当添加了

打开对应页面时,就创建了SignalR的连接了。

2.前端发起请求


前端的提交按钮对应的方法,使用的是axios发送http请求生成图片。

代码如下:

3.后端接口和实现

后端接口和实现方法完成定时任务的发起和signalR的消息推送

后端接口如下:

方法实现:

4.案例成果


案例地址(AI聊天+图片生成):https://ai.terramours.site/



阅读如遇样式问题,请前往个人博客浏览: https://www.raokun.top

拥抱ChatGPT:https://ai.terramours.site

开源项目地址:https://github.com/firstsaofan/TerraMours


SignalR+Hangfire 实现后台任务队列和实时通讯的评论 (共 条)

分享到微博请遵守国家法律