.Net Core/.Net 6/.Net 8,一个简易的消息队列
.Net Core/.Net 6/.Net 8,一个简易的消息队列
- 身份验证接口
- 身份验证接口实现
- program.cs
- 通过api调用
做着玩的, 只实现了消息入队出队功能,没有持久化,也没有其它任何高级功能
直接上代码
public class AMQBase//:ISingleton
{/// <summary>/// 主题队列/// </summary>public Dictionary<string,Queue<EnQueueMsg>> queues { get; set; }/// <summary>/// 验证用户,如果没有 IMQVerify 的实现,将不会验证用户/// </summary>readonly IMQVerify _verify;public AMQBase(IMQVerify verify) {_verify = verify;queues = new Dictionary<string, Queue<EnQueueMsg>>();/* 初始化时从 文件/数据库? 读取未消费消息? *//**/}/// <summary>/// 入队/// </summary>/// <returns></returns>public void EnQueue(EnQueueMsg msg) {if (_verify != null){if (!_verify.Verify(msg)){throw new Exception("身份验证失败");}}msg.msgid = Guid.NewGuid().ToString();//消息idEnQueueAsync(msg);}/// <summary>/// 异步执行入队/// </summary>/// <param name="msg"></param>/// <returns></returns>private async Task EnQueueAsync(EnQueueMsg msg){//新主题if (!queues.ContainsKey(msg.topic)){queues.Add(msg.topic, new Queue<EnQueueMsg>());}/* 异步存入文件/数据库? *//**///入队queues[msg.topic].Enqueue(msg);}/// <summary>/// 出队/// </summary>/// <param name="msg"></param>/// <returns></returns>public DeQueueData? DeQueue(DeQueueMsg msg){if (_verify != null){if (!_verify.Verify(msg)){throw new Exception("身份验证失败");}}//没有找到主题 或者队列为空if (!queues.ContainsKey(msg.topic)){return null;}if (queues[msg.topic].Count == 0){//主题队列为空,移除主题if (queues[msg.topic].Count == 0){queues.Remove(msg.topic);}return null;}//出队var mod=queues[msg.topic].Dequeue();var scount = queues[msg.topic].Count;//主题队列为空,移除主题if (queues[msg.topic].Count == 0){queues.Remove(msg.topic);}/* 异步 从文件/数据库 修改消息状态或删除? *//**/return new DeQueueData { msgid= mod.msgid,//消息idcoutent=mod.content,//消息内容topic= mod.topic,//主题count= scount//剩余未消费消息数量};}/// <summary>/// 获取主题列表/// </summary>/// <returns></returns>public string[] TopicList(){return queues.Keys.ToArray();}/// <summary>/// 获取全部的主题和未消费的消息数量/// </summary>/// <returns></returns>public List<MqCount> GetCount() { return queues.Select(x=>new MqCount { topic=x.Key,count=x.Value.Count}).ToList(); }/// <summary>/// 获取指定的主题和未消费的消息数量/// </summary>/// <returns></returns>public MqCount GetCount(string topic){if (!queues.ContainsKey(topic)) return null;return new MqCount{topic=topic,count = queues[topic].Count};}/// <summary>/// 删除主题,删除整个主题队列/// </summary>/// <param name="topic"></param>public async Task Remove(RemoveTopic rem){if (_verify != null){if (!_verify.Verify(rem)){throw new Exception("身份验证失败");}}queues.Remove(rem.topic);}}
身份验证接口
/// <summary>
/// 身份验证接口
/// </summary>
public interface IMQVerify//: ISingleton
{public bool Verify(MqMegBase mqMeg);
}
身份验证接口实现
public class AMQVerify : IMQVerify//,ISingleton{public bool Verify(MqMegBase mqMeg){if (mqMeg.user == "mq" && mqMeg.password == "123456") return true;return false;}}
program.cs
builder.Services.AddSingleton<IMQVerify, AMQVerify>();builder.Services.AddSingleton<AMQBase>();
通过api调用
[ApiController, Route("[controller]/[action]")]public class AMQController : Controller{readonly AMQBase _mq;public AMQController(AMQBase mq){_mq = mq;}/// <summary>/// 入队/// </summary>/// <param name="msg"></param>[HttpPost]public async Task EnQueue(EnQueueMsg msg){_mq.EnQueue(msg);}/// <summary>/// 出队/// </summary>/// <param name="msg"></param>/// <returns></returns>[HttpPost]public async Task<JsonResult> DeQueue(DeQueueMsg msg){return Json(_mq.DeQueue(msg));}/// <summary>/// 获取主题列表/// </summary>/// <returns></returns>[HttpGet]public JsonResult TopicList(){return Json(_mq.TopicList());}/// <summary>/// 获取全部的主题和未消费的消息数量/// </summary>/// <returns></returns>[HttpGet]public JsonResult GetCount(){return Json(_mq.GetCount());}/// <summary>/// 获取指定的主题和未消费的消息数量/// </summary>/// <param name="topic"></param>/// <returns></returns>[HttpGet]public JsonResult GetTopicCount(string topic){return Json(_mq.GetCount(topic));}/// <summary>/// 删除主题/// </summary>/// <param name="rem"></param>[HttpPost]public void Remove(RemoveTopic rem){_mq.Remove(rem);}}相关文章:
.Net Core/.Net 6/.Net 8,一个简易的消息队列
.Net Core/.Net 6/.Net 8,一个简易的消息队列 身份验证接口身份验证接口实现program.cs通过api调用 做着玩的, 只实现了消息入队出队功能,没有持久化,也没有其它任何高级功能 直接上代码 public class AMQBase//:ISingleton {/// <summary…...
OpenHarmony4.0分布式任务调度浅析
1 概述 OpenHarmony 分布式任务调度是一种基于分布式软总线、分布式数据管理、分布式 Profile 等技术特性的任务调度方式。它通过构建一种统一的分布式服务管理机制,包括服务发现、同步、注册和调用等环节,实现了对跨设备的应用进行远程启动、远程调用、…...
element-ui backtop 组件源码分享
今日简单分享 backtop 组件的源码实现,从以下三个方面: 1、backtop 组件页面结构 2、backtop 组件属性 3、backtop 组件事件 一、backtop 组件页面结构 二、backtop 组件属性 2.1 target 属性,触发滚动的对象,类型 string&am…...
MongoDB快照(LVM)业务场景应用实战
MongoDB和LVM快照概述 MongoDB的重要性:MongoDB支持的灵活的文档模型,使其成为处理大量分散数据的理想选择,特别是在需要快速迭代和频繁更改数据结构的应用中。 LVM(逻辑卷管理)快照技术基本概念:LVM允许…...
3D开发工具HOOPS:推动汽车行业CAD可视化发展
在最近的行业对话中,Tech Soft 3D(HOOPS厂商)的Jonathan Girroir和Actify的Peter West探讨了CAD可视化在当代企业中的重要性和挑战。作为CAD可视化领域的佼佼者,Actify通过其广受欢迎的Spinfire应用,赋能了全球40多个国…...
Centos安装MySQL提示公钥尚未安装
一、问题 在Centos7.9使用yum安装MySQL时出现错误,提示:mysql-community-server-5.7.44-1.el7.x86_64.rpm 的公钥尚未安装,如下图所示: 执行命令:systemctl start mysqld也提示错误:Failed to start mysq…...
FebHost:英国.UK域名简介
.UK域名是互联网上最广为人知且广泛使用的国家代码顶级域名之一。作为英国官方的国家代码,自诞生之日起,.UK域名对英国本土个人、企业及在线品牌建设扮演了关键角色。 .UK域名于1985年首次推出,这是早期为创建有序域名系统而努力的一部分。当…...
SQL Serve---查询
概要 1、order by子句 —默认asc(升序)、desc(降序) 2、distinct关键字 3、group by子句 4、聚合函数 —max()、min()、sum()、avg()、count() 5、having子句 6、compute子句 英文关键字 order by 排序 asc…...
RabbitMQ3.13.x之十一_RabbitMQ中修改用户密码及角色tags
RabbitMQ3.13.x之十一_RabbitMQ中修改用户密码及角色tgs 文章目录 RabbitMQ3.13.x之十一_RabbitMQ中修改用户密码及角色tgs1. 修改用户的密码1. 修改密码语法2. 修改案例 2.修改角色tags1. 修改标签(tags)语法2. 修改案例 可以使用 RabbitMQ 的命令行工具 rabbitmqctl 来修改用…...
Taro打包生成不同目录
使用taro init创建taro项目时,taro默认打包目录是: /config/index.js outputRoot:dist默认的目录,编译不同平台代码时就会覆盖掉,为了达到多端同步调试的目的,这时需要修改默认生成目录了,通过查看官方文…...
2024-04-08 NO.5 Quest3 手势追踪进行 UI 交互
文章目录 1 玩家配置2 物体配置3 添加视觉效果4 添加文字5 其他操作5.1 双面渲染5.2 替换图片 在开始操作前,我们导入先前配置好的预制体 MyOVRCameraRig,相关介绍在 《2024-04-03 NO.4 Quest3 手势追踪抓取物体-CSDN博客》 文章中。 1 玩家配置 &a…...
PaddleDetection 项目使用说明
PaddleDetection 项目使用说明 PaddleDetection 项目使用说明数据集处理相关模块环境搭建 PaddleDetection 项目使用说明 https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.7/configs/ppyoloe/README_cn.md 自己项目: https://download.csdn.net/d…...
leetcode解题思路分析(一百五十五)1352 - 1358 题
最后 K 个数的乘积 请你实现一个「数字乘积类」ProductOfNumbers,要求支持下述两种方法: add(int num) 将数字 num 添加到当前数字列表的最后面。 getProduct(int k) 返回当前数字列表中,最后 k 个数字的乘积。 你可以假设当前列表中始终 至少…...
如何将普通maven项目转为maven-web项目
文件-项目结构(File-->Project Structure ) 模块-->learn(moudle-->learn) 选中需要添加web的moudle,点击加号,我得是learn,单击选中后进行下如图操作: 编辑路径 结果如下…...
LeetCode 226. 翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root [2,1,3] 输出:[2,3,1] 示例…...
【ArcGIS Pro二次开发】(85):Aspose.Cells中的Excel操作
Aspose.Cells是一款功能强大的Excel文档处理和转换控件,开发人员和客户电脑无需安装Microsoft Excel也能在应用程序中实现类似Excel的强大数据管理功能。 1、获取工作薄Workbook string excelFile "C:\Users\Administrator\Desktop\FE.xlsx"; Workbook …...
基于java+springboot+vue实现的兴顺物流管理系统(文末源码+Lw)23-287
摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,货运信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…...
pytorch view、expand、transpose、permute、reshape、repeat、repeat_interleave
非contiguous操作 There are a few operations on Tensors in PyTorch that do not change the contents of a tensor, but change the way the data is organized. These operations include: narrow(), view(), expand() and transpose() permute() This is where the con…...
uni-app实现下拉刷新
业务逻辑如下: 1.在滚动容器中加入refresher-enabled属性,表示为开启下拉刷新 2.监听事件,添加refresherrefresh事件 3.在事件监听函数中加载数据 4.关闭动画,添加refresher-triggered属性,在数据请求前开启刷新动画…...
vue ts 应用梳理
文章目录 前言一、页面传值1.1 [props](https://cn.vuejs.org/guide/components/props.html)1.2 [emit](https://cn.vuejs.org/guide/components/events.html)1.3 [store](https://pinia.vuejs.org/zh/getting-started.html) 二、实时计算2.1 [watch](https://cn.vuejs.org/gui…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
