.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…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
