【6】.net msmq消息队列实例
1.msmq消息队列windows环境安装
2.创建消息队列实体对象
/// <summary>
/// 消息实体
/// </summary>
[Serializable]
public class MsmqData
{
public int Id { get; set; }
public string Name { get; set; }
}
实体对象必须可序列化,即需添加[Serializable]
3.创建消息队列管理对象
/// <summary>
/// 消息队列管理对象
/// </summary>
public class MSMQManager
{
/// <summary>
/// 消息队列地址
/// </summary>
public string _path;
/// <summary>
/// 消息队列对象
/// </summary>
public MessageQueue _msmq; /// <summary>
/// 构造函数并初始化消息队列对象
/// </summary>
/// <param name="path"></param>
public MSMQManager(string path = null)
{
if (string.IsNullOrEmpty(path))
{
_path = ConfigurationManager.AppSettings["MsmqPath"].ToString();
}
else
{
_path = path;
}
if (MessageQueue.Exists(_path))
{
_msmq = new MessageQueue(_path);
}
else
{
_msmq = MessageQueue.Create(_path);
}
} /// <summary>
/// 发送消息队列
/// </summary>
/// <param name="body"></param>
public void Send(object body)
{
_msmq.Send(new Message(body, new XmlMessageFormatter(new Type[] { typeof(MsmqData) })));
} /// <summary>
/// 接受队列中第一个消息后删除
/// </summary>
/// <returns></returns>
public object ReceiveMessage()
{
var msg = _msmq.Receive();
if (msg != null)
{
//msg.Formatter = new BinaryMessageFormatter();
msg.Formatter = new XmlMessageFormatter(new Type[] { typeof(MsmqData) });
var body = (MsmqData)msg.Body;
Console.WriteLine("消息内容:{0},{1}", body.Id, body.Name);
return msg.Body;
}
return null;
} /// <summary>
/// 遍历消息队列中的消息并删除
/// </summary>
public void WriteAllMessage()
{
var enumerator = _msmq.GetMessageEnumerator2();
while (enumerator.MoveNext())
{
Message msg = (Message)(enumerator.Current);
//msg.Formatter = new BinaryMessageFormatter();
msg.Formatter = new XmlMessageFormatter(new Type[] { typeof(MsmqData) });
var body = (MsmqData)msg.Body;
Console.WriteLine("消息内容:{0},{1}", body.Id, body.Name);
//根据消息ID查询并删除消息队列
_msmq.ReceiveById(msg.Id); }
}
}
此例中使用XML格式(XmlMessageFormtter)对消息进行格式化
4.主程序添加调用消息队列
static void Main(string[] args)
{
var msmqManager = new MSMQManager();
for (int i = ; i <= ; i++)
{
MsmqData data = new MsmqData() { Id = i, Name = string.Format("Name{0}", i) };
//发送消息
msmqManager.Send(data);
}
var msg = msmqManager.ReceiveMessage();
msmqManager.WriteAllMessage();
Console.ReadLine();
}
添加消息队列地址配置,本例使用私有队列
<appSettings>
<add key="MsmqPath" value=".\private$\myQueue"/>
</appSettings>
5.运行程序查看结果
6.常见消息队列类型路径的语法
路径中使用的语法
公共队列
MachineName\QueueName
专用队列
MachineName\Private$\QueueName
日志队列
MachineName\QueueName\Journal$
【6】.net msmq消息队列实例的更多相关文章
- 微软MSMQ消息队列的使用
首先在windows系统中安装MSMQ 一.MSMQ交互 开发基于消息的应用程序从队列开始.MSMQ包含四种队列类型: 外发队列:消息发送到目的地之前,用它来临时存储消息. 公共队列:在主动目录中公布 ...
- 【转】MSMQ消息队列安装
一.Windows 7安装.管理消息队列1.安装消息队列 执行用户必须要有本地 Administrators 组中的成员身份,或等效身份. 具体步骤: 开始—>控制面板—>程 ...
- MSMQ消息队列安装
一.Windows 7安装.管理消息队列1.安装消息队列 执行用户必须要有本地 Administrators 组中的成员身份,或等效身份. 具体步骤: 开始—>控制面板—>程 ...
- MSMQ消息队列 用法
引言 接下来的三篇文章是讨论有关企业分布式开发的文章,这三篇文章筹划了很长时间,文章的技术并不算新,但是文章中使用到的技术都是经过笔者研究实践后总结的,正所谓站在巨人的肩膀上,笔者并不是巨人,但也希望 ...
- 跟我一起学WCF(1)——MSMQ消息队列
一.引言 Windows Communication Foundation(WCF)是Microsoft为构建面向服务的应用程序而提供的统一编程模型,该服务模型提供了支持松散耦合和版本管理的序列化功能 ...
- C#实战Microsoft Messaging Queue(MSMQ)消息队列(干货)
前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代 ...
- MSMQ(消息队列)续
在上一篇我简单介绍了MSMQ的相关概念,本篇将以代码说明 Message Message是MSMQ的数据存储单元,我们的用户数据一般也被填充在Message的body当中,因此很重要,让我们来看一看其 ...
- C#实战Microsoft Messaging Queue(MSMQ)消息队列
前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代 ...
- C#实战Microsoft Messaging Queue(MSMQ)消息队列(干货)<转>
前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代 ...
随机推荐
- 导出包含图片的excel、word、pdf 笔记
/** * 导出word * @throws Exception */ @Override public byte[] WordExport( List<VbLibGlobalAnalyList ...
- 转载-----Java Longest Palindromic Substring(最长回文字符串)
转载地址:https://www.cnblogs.com/clnchanpin/p/6880322.html 假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic st ...
- CryptoJS导入sha加密包出现错误
Uncaught TypeError: Cannot read property 'extend' of undefined at sha224.js:12 at sha224.js:60 Uncau ...
- shell的算术运算
变量的数值计算方法大致有双括号 (()), expr, bc, $[ ] 例子1 注意:2**3表示2的3次方,a++表示先输出a自身的值,然后进行++的运算: --a表示先进行--的运算,然后再输 ...
- BZOJ - 1935 / 1176 cdq分治 三维偏序
题意:给定n*m的网格,且给出n个(x,y)表示该网格已被占有,q次询问(x1,y1)到(x2,y2)的网格中有多少个被占有,n,m范围1e7,q范围5e5 cdq按x轴排序,树状数组维护y轴 #in ...
- webform的导出
呃 怎么说呢 我这个是公司大佬写好的 我直接调用 和以前写的百度上面的都不大一样 感觉很Nice 插个眼 说不定以后还得回来参考参考 具体是这样的 你先写好一个模板 就是你要导出的数据应该在Ex ...
- [转] 公共DNS,114.114.114.114和8.8.8.8
[From] https://zhidao.baidu.com/question/304558434158495364.html 一.两者的联系 114.114.114.114和8.8.8.8,这两个 ...
- centos7安装串口终端kermit
1. 将usb转串口连接到PC上.通过dmesg命令可以查看USB转串口是否被PC识别.显示 ……attachec to ttyUSB0即被识别. 2. 安装kermit. [seif@cen ...
- vue中npm run dev 不能自动打开浏览器运行项目
最近用vue2.0 + webpack搭建了环境创建新的项目.出现一个很蹩脚的问题: 在终端输入 npm run dev 的时候,不能自动打开浏览器运行项目. 这段话的意思是:你的应用程序运行地址是: ...
- Java第四次实训作业
1.编写“电费管理类”及其测试类. 第一步 编写“电费管理”类1)私有属性:上月电表读数.本月电表读数2)构造方法:无参.2个参数3)成员方法:getXXX()方法.setXXX()方法4)成员方法 ...