.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);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/305633.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科技论文和会议录制高质量Presentation Video视频方法

一、背景 机器人领域&#xff0c;许多高质量的期刊和会议&#xff08;如IEEE旗下的TRO&#xff0c;RAL&#xff0c;IROS&#xff0c;ICRA等&#xff09;在你的论文收录后&#xff0c;需要上传一个Presentation Video材料&#xff0c;且对设备兼容性和视频质量有较高要求&#…

Vue3基础语法

在这个章节中&#xff0c;简单的看下Vue3的基础语法&#xff0c;有了这些基础后&#xff0c;对写vue3单页也就没有什么问题了。 模板语法 在写html时&#xff0c;我们希望在某个节点绑定一个动态值时&#xff0c;是使用dom操作执行的&#xff0c;如下&#xff1a; <!DOCT…

Linux:动态库加载、编址

目录 一、库的概念 二、动静态库的加载 2.1绝对编址与相对编址 2.1一般程序的加载 三、动态库的加载 一、库的概念 库默认就是一个磁盘级文件&#xff0c;所以在执行代码时&#xff0c;库和可执行程序都会被加载到内存中&#xff0c;从原理上&#xff0c;库函数的调用依旧…

多态【C/C++复习版】

目录 一、多态是什么&#xff1f;如何实现&#xff1f; 二、 什么是重写&#xff1f;有什么特点&#xff1f; 三、什么是协变&#xff1f; 四、析构函数能实现多态吗&#xff1f;为什么要实现&#xff1f; 五、override和final的作用是什么&#xff1f; 六、 多态的原理是…

从 SQLite 3.4.2 迁移到 3.5.0(二十)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite---调试提示&#xff08;十九&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 ​ SQLite 版本 3.5.0 &#xff08;2007-09-04&#xff09; 引入了一个新的操作系统接口层&#xff0c; 与所有先前版本的 SQLi…

ELK 日志分析系统(一)

一、概念 二、详解 2.1 Elasticsearch 核心概念 2.1.1 接近实时(NRT) 2.1.2 cluster集群 2.1.3 Node节点 2.1.4 index索引 2.1.5 类型&#xff08;type&#xff09; 2.1.6 文档&#xff08;document) 2.1.7 分片和副本(shards & replicas) 2.2 Logstash主要组件 …

个人博客系统项目(SpringBoot+Linux部署上线)

在学完SpringBoot框架、MyBatis后&#xff0c;直接开始做第一个项目&#xff1a;博客系统 首先&#xff0c;该博客系统包含核心功能有&#xff1a; 一、登录、注册、退出登录功能。 二、没有登陆前可以查看博客首页以及博客展示的分页处理&#xff0c;以及点击查看博客可以…

windows下pycharm中配置conda虚拟环境

目录 一&#xff1a;背景 二&#xff1a;安装conda环境 三&#xff1a;pycharm配置环境 四&#xff1a;注意问题 一&#xff1a;背景 在使用python的过程中&#xff0c;我们可能需要在一个windows环境中创建多个版本的python和安装不同的库去做一些开发任务。 使用conda&a…

IDEA2023 开发环境配置

目录 1. 关闭IDEA自动更新1.2 IDEA 新版样式切换 2. Maven配置2.1本地仓库优先加载2.2 maven.config配置文件中 3. 全局配置JDK4. 配置文件编码:UTF-85. 开启自动编译&#xff08;全局配置&#xff09;6. 开启自动导包7. 开启鼠标悬浮&#xff08;提示文档信息&#xff09;8. 设…

10分钟1000台虚机 云安全效能双升 亚信安全新信舱无代理云平台快速适配版正式发布

新信舱 亚信安全新信舱无代理云平台快速适配版正式发布。在云平台依赖性、无代理部署速度、宿主机无代理AV防护和虚拟机缓存扫描性能等方面&#xff0c;新信舱无代理版本提供了无缝的可扩展性、低资源消耗并降低管理复杂性&#xff0c;让安全防护真正做到了 多快好省&#xff…

Rust语言入门第二篇-Cargo教程

文章目录 Rust语言入门第二篇-Cargo教程一&#xff0c;Cargo 是什么二&#xff0c;Cargo教程Cargo.toml文件src/main.rs 文件构建并运行Cargo项目 Rust语言入门第二篇-Cargo教程 本节提供对cargo命令行工具的快速了解。我们演示了它为我们生成新包的能力&#xff0c;它在包内编…

基于Leaflet.js的Marker闪烁特效的实现-模拟预警

目录 前言 一、闪烁组件 1、关于leaflet-icon-pulse 2、 使用leaflet-icon-pulse 3、方法及参数简介 二、闪烁实例开发 1、创建网页 2、Marker闪烁设置 3、实际效果 三、总结 前言 在一些地质灾害或者应急情况当中&#xff0c;或者热门预测当中。我们需要基于时空位置来…

ActiveMQ + MQTT 集群搭建(虚机版本) + Springboot使用配置

文章目录 前言一、ActiveMQ、 MQTT是什么&#xff1f;1.ActiveMQ介绍2.MQTT介绍 二、集群搭建步骤1.下载apache-activemq-5.15.12-bin.tar.gz2.上传apache-activemq-5.15.12-bin.tar.gz到服务器并解压文件到文件夹clusters、master、slave三个文件夹下面形成三个节点&#xff0…

C++ stl容器string的底层模拟实现

目录 前言&#xff1a; 1.成员变量 2.构造函数与拷贝构造函数 3.析构函数 4.赋值重载 5.[]重载 6.比较关系重载 7.reserve 8.resize 9.push_back,append和重载 10.insert 11.erase 12.find 14.迭代器 15.流插入&#xff0c;流提取重载 16.swap 17.c_str 18.完…

信道延迟的计算方法

目录 1.信道延迟影响的因素 2.计算公式 3.实践理解 4.基础知识 1.信道延迟影响的因素 因素1&#xff1a;与源端和宿端距离&#xff1b; 因素2&#xff1a;具体信道中的信号传播速率有关&#xff1b; 2.计算公式 总延迟 T发送延迟T1&#xff08;信号传播速率&#xff09; 线路…

21 - 寄存器控制器

---- 整理自B站UP主 踌躇月光 的视频 1. 程序计数器 PC 改造 原来的 PC 由于后续的 ALU 会较频繁的变动&#xff0c;因而会经常修改 PC&#xff0c;所以将 PC 中的 ALU 换成 8 位加法器。改造后的 PC&#xff1a; 2. 寄存器控制器的实现 我们控制器主要通过 ROM 实现&#xf…

FreeBuf 全球网络安全产业投融资观察(3月)

综述 据不完全统计&#xff0c;2024年3月&#xff0c;全球网络安全市场共发生投融资事件53起&#xff0c;其中国内4起&#xff0c;国外49起。 3月全球络安全产业投融资统计表&#xff08;数据来源&#xff1a;航行资本、36氪&#xff09; 整体而言&#xff0c;国内4起投融资事…

(2022级)成都工业学院数据库原理及应用实验三:数据定义语言DDL

唉&#xff0c;用爱发电连赞都没几个&#xff0c;博主感觉没有动力了 想要完整版的sql文件的同学们&#xff0c;点赞评论截图&#xff0c;发送到2923612607qq,com&#xff0c;我就会把sql文件以及如何导入sql文件到navicat的使用教程发给你的 基本上是无脑教程了&#xff0c;…

Stable Diffusion之Ubuntu下部署

1、安装conda环境 conda create -n webui python3.10.6 2、激活环境 每次使用都要激活 conda activate webui 注意开始位置的变换 关闭环境 conda deactivate webui 3、离线下载SD 代码 https://github.com/AUTOMATIC1111/stable-diffusion-webui https://github.com/Stabilit…

华为OD技术面试-有序数组第K最小值

背景 2024-03-15华为od 二面&#xff0c;记录结题过程 有序矩阵中第 K 小的元素 - 力扣&#xff08;LeetCode&#xff09; https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/submissions/512483717/ 题目 给你一个 n x n 矩阵 matrix &#xff0c;其…