浅谈消息队列 Message Queue
消息队列:在消息传递的过程中暂时保存消息的容器,充当发送者和接受者的中间人
消息队列的基本操作
- using System;
- using System.Messaging;
- namespace MQ
- {
- class MQHelper
- {
- /// <summary>
- /// 创建一个消息队列
- /// </summary>
- /// <param name="name">消息队列的名称</param>
- /// <returns>是否创建成功</returns>
- public static bool CreateNewMQ(string name)
- {
- if (!MessageQueue.Exists(".\\private$\\" + name))
- {
- MessageQueue mq = MessageQueue.Create(".\\private$\\" + name);
- mq.Label = "private$\\" + name;
- return true;
- }
- else
- {
- return false;
- }
- }
- /// <summary>
- /// 删除一个消息队列
- /// </summary>
- /// <param name="name">消息队列的名称</param>
- /// <returns>是否创建成功</returns>
- public static bool DeleteNewMQ(string name)
- {
- if (!MessageQueue.Exists(".\\private$\\" + name))
- {
- MessageQueue.Delete(".\\private$\\" + name);
- return true;
- }
- else
- {
- return false;
- }
- }
- /// <summary>
- /// 发送消息到指定消息队列
- /// </summary>
- /// <param name="mq_name">消息队列名称</param>
- /// <param name="msg_lable">消息头</param>
- /// <param name="msg_body">消息体</param>
- public static void SendMessage(string mq_name, string msg_lable, string msg_body)
- {
- MessageQueue mq = new MessageQueue(@".\private$\" + mq_name);
- Message message = new Message();
- message.Label = msg_lable;
- message.Body = msg_body;
- mq.Send(message);
- }
- /// <summary>
- /// 从指定消息队列获取第一条消息
- /// </summary>
- /// <param name="mq_name">消息队列名称</param>
- /// <returns>Message</returns>
- public static Message ReceiveMessage(string mq_name)
- {
- MessageQueue mq = new MessageQueue(@".\private$\" + mq_name);
- if (mq.GetAllMessages().Length > 0)
- {
- Message message = mq.Receive();
- if (message != null)
- {
- message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
- }
- return message;
- }
- else
- {
- return null;
- }
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Messaging;
- //添加物理文件 System.Messaging 的引用
- namespace testweb
- {
- public partial class MSMQtest : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- //CreateNewQueue("MsgQueue");//创建一个消息队列
- //sendSimpleMsg();//每一个队列最好只发送和接收同一种格式的信息,不然不好转换格式。
- //receiveSimpleMsg();//
- //receiveSimpleMsg();
- //sendComplexMsg();
- //receiveComplexMsg();
- MsgModel m = receiveComplexMsg<MsgModel>();
- Response.Write(m.ToString());
- }
- private void sendSimpleMsg()
- {
- //实例化MessageQueue,并指向现有的一个名称为VideoQueue队列
- MessageQueue MQ = new MessageQueue(@".\private$\MsgQueue");
- //MQ.Send("消息测试", "测试消息");
- System.Messaging.Message message = new System.Messaging.Message();
- message.Label = "消息lable";
- message.Body = "消息body";
- MQ.Send(message);
- Response.Write("成功发送消息," + DateTime.Now + "<br/>");
- }
- private void receiveSimpleMsg()
- {
- MessageQueue MQ = new MessageQueue(@".\private$\MsgQueue");
- //调用MessageQueue的Receive方法接收消息
- if (MQ.GetAllMessages().Length > 0)
- {
- System.Messaging.Message message = MQ.Receive(TimeSpan.FromSeconds(5));
- if (message != null)
- {
- //message.Formatter = new System.Messaging.XmlMessageFormatter(new string[] { "Message.Bussiness.VideoPath,Message" });//消息类型转换
- message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
- Response.Write(string.Format("接收消息成功,lable:{0},body:{1},{2}<br/>", message.Label, message.Body.ToString(), DateTime.Now));
- }
- }
- else
- {
- Response.Write("没有消息了!<br/>");
- }
- }
- private void sendComplexMsg()
- {
- //实例化MessageQueue,并指向现有的一个名称为VideoQueue队列
- MessageQueue MQ = new MessageQueue(@".\private$\MsgQueue");
- //MQ.Send("消息测试", "测试消息");
- System.Messaging.Message message = new System.Messaging.Message();
- message.Label = "复杂消息lable";
- message.Body = new MsgModel("1", "消息1");
- MQ.Send(message);
- Response.Write("成功发送消息,"+DateTime.Now+"<br/>");
- }
- private void receiveComplexMsg()
- {
- MessageQueue MQ = new MessageQueue(@".\private$\MsgQueue");
- //调用MessageQueue的Receive方法接收消息
- if (MQ.GetAllMessages().Length > 0)
- {
- System.Messaging.Message message = MQ.Receive(TimeSpan.FromSeconds(5));
- if (message != null)
- {
- message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(MsgModel) });//消息类型转换
- MsgModel msg = (MsgModel)message.Body;
- Response.Write(string.Format("接收消息成功,lable:{0},body:{1},{2}<br/>", message.Label, msg, DateTime.Now));
- }
- }
- else
- {
- Response.Write("没有消息了!<br/>");
- }
- }
- private T receiveComplexMsg<T>()
- {
- MessageQueue MQ = new MessageQueue(@".\private$\MsgQueue");
- //调用MessageQueue的Receive方法接收消息
- if (MQ.GetAllMessages().Length > 0)
- {
- System.Messaging.Message message = MQ.Receive(TimeSpan.FromSeconds(5));
- if (message != null)
- {
- message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(T) });//消息类型转换
- T msg = (T)message.Body;
- return msg;
- }
- }
- return default(T);
- }
- /// <summary>
- /// 创建消息队列
- /// </summary>
- /// <param name="name">消息队列名称</param>
- /// <returns></returns>
- public void CreateNewQueue(string name)
- {
- if (!System.Messaging.MessageQueue.Exists(".\\private$\\" + name))//检查是否已经存在同名的消息队列
- {
- System.Messaging.MessageQueue mq = System.Messaging.MessageQueue.Create(".\\private$\\" + name);
- mq.Label = "private$\\"+name;
- Response.Write("创建成功!<br/>");
- }
- else
- {
- //System.Messaging.MessageQueue.Delete(".\\private$\\" + name);//删除一个消息队列
- Response.Write("已经存在<br/>");
- }
- }
- }
- [Serializable]
- public class MsgModel
- {
- public string id { get; set; }
- public string Name { get; set; }
- public MsgModel() { }
- public MsgModel(string _id, string _Name)
- {
- id = _id;
- Name = _Name;
- }
- public override string ToString()
- {
- if (string.IsNullOrEmpty(id) || string.IsNullOrEmpty(Name)) return "";
- return string.Format("id--{0},Name--{1}",id,Name);
- }
- }
- }
浅谈消息队列 Message Queue的更多相关文章
- rabbitMQ消息队列 – Message方法解析
消息的创建由AMQPMessage对象来创建$message = new AMQPMessage("消息内容");是不是很简单. 后边是一个数组.可以对消息进行一些特殊配置$mes ...
- Linux:进程通信之消息队列Message实例
/*send.c*/ /*send.c*/ #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h&g ...
- day43-python消息队列二-queue模块
Python提供了Queue模块来专门实现消息队列Queue对象 Queue对象实现一个fifo队列(其他的还有lifo.priority队列,这里不再介绍).queue只有maxsize一个构造参数 ...
- 1.消息队列(queue)
版权声明:本文为博主原创文章,未经博主允许不得转载.https://www.cnblogs.com/Dana-gx/p/9724545.html 一.基本概念 IPC:Linux下的进程通信.包括6种 ...
- 微软消息队列-MicroSoft Message Queue(MSMQ)队列的C#使用
目录 定义的接口 接口实现 建立队列工厂 写入队列 获取消息 什么是MSMQ Message Queuing(MSMQ) 是微软开发的消息中间件,可应用于程序内部或程序之间的异步通信.主要的机制是:消 ...
- 浅谈 Event loop (事件循环)
从Event Loop谈JS的运行机制 先来理解一个概念: JS分为同步任务和异步任务 同步任务都在主线程上执行,形成一个执行栈 Execute Content Stack 主线程之外,事件触发线程管 ...
- C# 消息队列
阅读目录 1. 消息队列是什么? 2. 常见的消息队列框架有哪些? 3. MSMQ介绍 4. RabbitMQ介绍 消息队列是什么 简单的理解就是将消息添加一个队列中,使用时在从这个队列中取出来.那么 ...
- PHP的轻量消息队列php-resque使用说明
日志未经声明,均为AlloVince原创.版权采用『 知识共享署名-非商业性使用 2.5 许可协议』进行许可. 消息队列处理后台任务带来的问题 项目中经常会有后台运行任务的需求,比如发送邮件时,因为要 ...
- 【转】MSMQ 微软消息队列 简单 示例
MSMQ它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中:本地或者是异地的消息接收程 ...
随机推荐
- 论文翻译:2021_A New Real-Time Noise Suppression Algorithm for Far-Field Speech Communication Based on Recurrent Neural Network
论文地址:一种新的基于循环神经网络的远场语音通信实时噪声抑制算法 引用格式:Chen B, Zhou Y, Ma Y, et al. A New Real-Time Noise Suppression ...
- [CF1500E] Subset Trick (平衡树)
题面 洛谷翻译 V a n y a \rm Vanya Vanya 有一个初始大小为 n n n 的集合 S S S 和 q q q 次往集合加数/删数的操作.(集合中每个数字不同) 称一个数 x x ...
- 【java】学习路径38-数学模型分析:不同方式复制文件所需的时间
测试文件:一段72kb的文本.约5.6MB大小的pdf论文.约38.9MB大小的无损音频文件. demo001 论<到灯塔去>的凝视主题.pdf irreplaceable.movpkg ...
- javaweb-thymeleaf,加载jar包---视图基础
1.加载完thymeleaf的jar包 将thymeleaf的jar包复制到项目下lib文件夹中 右击lib文件夹,点击Add as librarb... 打开Project Structure,找到 ...
- 简单的java代码审计
描述 很简单的代码审计 java安全--Fastjson反序列化 java安全--SQL注入 Fastjson 反序列化 首先看一下配置文件,对于Maven项目,我们首先从pom.xml文件开始审计引 ...
- Typora多线程批量上传图片,永久免费25G图床
为了满足日常需求,就写了一个自动上传图片到图床的脚本 运行该程序可以做到自动完成图片上传,并自动替换为网络链接,支持多图同时上传,采用了多线程,上传速度提升很明显. 以Window系统为例,操作步骤: ...
- WinUI(WASDK)项目实践——优雅的开发上位机应用(新)
摘要 这就是一个记录自己进行WinUI项目实践的博客,项目开源地址如下,觉得有帮助的可以去看看,因为项目都开源了,所以保姆级的讲解肯定不如直接看代码来的实在了. 电子脑壳项目地址 为什么叫新 因为之前 ...
- 如何在 Jenkins CI/CD 流水线中保护密钥?
CI/CD 流水线是 DevOps 团队软件交付过程的基本组成部分.该流水线利用自动化和持续监控来实现软件的无缝交付.通过持续自动化,确保 CI/CD 流水线每一步的安全性非常重要.在流水线的各个阶段 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:Java集成应用中心。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- 高德地图与CAD图叠加显示方法汇总及优缺点分析
前言 高德地图应用在许多领域,平常我们用的地图导航,除过正常的地图导航指引功能之外,其实还有很多实用的功能.如高德影像地图应用在包括地理.土地测量.水文学.生态学.气象学以及海洋学等方面.Auto ...