当前位置: 首页 > news >正文

.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调用 做着玩的&#xff0c; 只实现了消息入队出队功能&#xff0c;没有持久化&#xff0c;也没有其它任何高级功能 直接上代码 public class AMQBase//:ISingleton {/// <summary…...

OpenHarmony4.0分布式任务调度浅析

1 概述 OpenHarmony 分布式任务调度是一种基于分布式软总线、分布式数据管理、分布式 Profile 等技术特性的任务调度方式。它通过构建一种统一的分布式服务管理机制&#xff0c;包括服务发现、同步、注册和调用等环节&#xff0c;实现了对跨设备的应用进行远程启动、远程调用、…...

element-ui backtop 组件源码分享

今日简单分享 backtop 组件的源码实现&#xff0c;从以下三个方面&#xff1a; 1、backtop 组件页面结构 2、backtop 组件属性 3、backtop 组件事件 一、backtop 组件页面结构 二、backtop 组件属性 2.1 target 属性&#xff0c;触发滚动的对象&#xff0c;类型 string&am…...

MongoDB快照(LVM)业务场景应用实战

MongoDB和LVM快照概述 MongoDB的重要性&#xff1a;MongoDB支持的灵活的文档模型&#xff0c;使其成为处理大量分散数据的理想选择&#xff0c;特别是在需要快速迭代和频繁更改数据结构的应用中。 LVM&#xff08;逻辑卷管理&#xff09;快照技术基本概念&#xff1a;LVM允许…...

3D开发工具HOOPS:推动汽车行业CAD可视化发展

在最近的行业对话中&#xff0c;Tech Soft 3D&#xff08;HOOPS厂商&#xff09;的Jonathan Girroir和Actify的Peter West探讨了CAD可视化在当代企业中的重要性和挑战。作为CAD可视化领域的佼佼者&#xff0c;Actify通过其广受欢迎的Spinfire应用&#xff0c;赋能了全球40多个国…...

Centos安装MySQL提示公钥尚未安装

一、问题 在Centos7.9使用yum安装MySQL时出现错误&#xff0c;提示&#xff1a;mysql-community-server-5.7.44-1.el7.x86_64.rpm 的公钥尚未安装&#xff0c;如下图所示&#xff1a; 执行命令&#xff1a;systemctl start mysqld也提示错误&#xff1a;Failed to start mysq…...

FebHost:英国.UK域名简介

.UK域名是互联网上最广为人知且广泛使用的国家代码顶级域名之一。作为英国官方的国家代码&#xff0c;自诞生之日起&#xff0c;.UK域名对英国本土个人、企业及在线品牌建设扮演了关键角色。 .UK域名于1985年首次推出&#xff0c;这是早期为创建有序域名系统而努力的一部分。当…...

SQL Serve---查询

概要 1、order by子句 —默认asc&#xff08;升序&#xff09;、desc&#xff08;降序&#xff09; 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项目时&#xff0c;taro默认打包目录是&#xff1a; /config/index.js outputRoot:dist默认的目录&#xff0c;编译不同平台代码时就会覆盖掉&#xff0c;为了达到多端同步调试的目的&#xff0c;这时需要修改默认生成目录了&#xff0c;通过查看官方文…...

2024-04-08 NO.5 Quest3 手势追踪进行 UI 交互

文章目录 1 玩家配置2 物体配置3 添加视觉效果4 添加文字5 其他操作5.1 双面渲染5.2 替换图片 ​ 在开始操作前&#xff0c;我们导入先前配置好的预制体 MyOVRCameraRig&#xff0c;相关介绍在 《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 自己项目&#xff1a; https://download.csdn.net/d…...

leetcode解题思路分析(一百五十五)1352 - 1358 题

最后 K 个数的乘积 请你实现一个「数字乘积类」ProductOfNumbers&#xff0c;要求支持下述两种方法&#xff1a; add(int num) 将数字 num 添加到当前数字列表的最后面。 getProduct(int k) 返回当前数字列表中&#xff0c;最后 k 个数字的乘积。 你可以假设当前列表中始终 至少…...

如何将普通maven项目转为maven-web项目

文件-项目结构&#xff08;File-->Project Structure &#xff09; 模块-->learn&#xff08;moudle-->learn&#xff09; 选中需要添加web的moudle&#xff0c;点击加号&#xff0c;我得是learn&#xff0c;单击选中后进行下如图操作&#xff1a; 编辑路径 结果如下…...

LeetCode 226. 翻转二叉树

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,3,1] 示例…...

【ArcGIS Pro二次开发】(85):Aspose.Cells中的Excel操作

Aspose.Cells是一款功能强大的Excel文档处理和转换控件&#xff0c;开发人员和客户电脑无需安装Microsoft Excel也能在应用程序中实现类似Excel的强大数据管理功能。 1、获取工作薄Workbook string excelFile "C:\Users\Administrator\Desktop\FE.xlsx"; Workbook …...

基于java+springboot+vue实现的兴顺物流管理系统(文末源码+Lw)23-287

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;货运信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…...

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实现下拉刷新

业务逻辑如下&#xff1a; 1.在滚动容器中加入refresher-enabled属性&#xff0c;表示为开启下拉刷新 2.监听事件&#xff0c;添加refresherrefresh事件 3.在事件监听函数中加载数据 4.关闭动画&#xff0c;添加refresher-triggered属性&#xff0c;在数据请求前开启刷新动画…...

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…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#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&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...