MSMQ学习笔记
这几天学习了一下MSMQ,虽然不能说非常深入的了解其机制与实际用法(具体项目的实现),但也要给自己的学习做个总结。学习心得如下:
一、MSMQ即微软消息队列。用于程序之间的异步消息通信,主要的机制就是在某种情况将消息以队列的形式存于公共的空间,又在特定条件下进行相应的处理。
二、MSMQ的使用:
1、安装系统消息队列。【控制面板】--【卸载程序】--【关闭/打开windows功能】--添加MSMQ功能。如下图所示
2、MessageQueue在System.Messaging命名空间下的。能够清楚的知道MessageQueue的内部方法和属性就可以数量的使用Msmq了。先列举几个比较常用的方法:
a、MessageQueue的类方法:
MessageQueue.Create(string path)---新建路径为path的消息队列(非事务型)
MessageQueue.Create(string path,bool transactional)----新建路径为path的消息队列(是否为事务型由transactional决定)
MessageQueue.Exists(string path)---判断是否已经存在路径为path的消息队列
MessageQueue.Delete(string path)--删除路径为path的消息队列
b、MessageQueue中的实例方法:
---BeginPeek(); 异步获取队列中的第一条消息,但不删除
---Peek(); 获取队列中的第一条消息,但不删除
---BeginReceive();异步获取队列中的第一条消息,同时删除
---Receive();获取队列中的第一条消息,同时删除
---Send(object obj);向队列中添加消息,object一般指定为Message对象
---GetAllMessages();获取队列中的所有消息,同时删除
---Purge(); 清空队列
---Formatter属性-----有两种形式,一种是二进制的形式(BinaryMessageFormatter),另一种是Xml形式(XmlMessageFormatter)
三、使用事例的部分代码:
1、创建
- MessageQueue messageQueue = null;
- string path = @".\private$\Message\";
- /// <summary>
- /// 打开对应的Msmq
- /// </summary>
- /// <param name="path">msmq路径</param>
- /// <param name="transactional">是否为事务</param>
- public void OpenMq(string path,bool transactional)
- {
- if (MessageQueue.Exists(path))
- {
- messageQueue = new MessageQueue(path);//注意已经存在该路径的msmq,其事务性是不可修改的
- }
- else
- {
- messageQueue = MessageQueue.Create(path,transactional);
- }
- }
2、发送消息至队列
- /// <summary>
- /// 二进制进队
- /// </summary>
- /// <param name="entity">可序列化对象</param>
- public void SendBinary(Entity entity)
- {
- messageQueue.Send(new Message(entity, new BinaryMessageFormatter()));
- }
- /// <summary>
- /// xml进队
- /// </summary>
- /// <param name="o"></param>
- public void SendXml(object o)
- {
- messageQueue.Send(new Message(o, new XmlMessageFormatter()));
- }
- /// <summary>
- /// 事务进队
- /// </summary>
- /// <param name="entity">可序列化对象</param>
- /// <param name="ent">可序列化对象</param>
- /// <param name="msg"></param>
- /// <param name="flag">true为xml,false为binary</param>
- public void XmlSendWithTrans(Entity entity, Ent ent, string msg, bool flag)
- {
- if (flag)
- mq.Formatter = new XmlMessageFormatter(new Type[] { typeof(Entity), typeof(Ent), typeof(string) });
- else
- {
- messageQueue.Formatter = new BinaryMessageFormatter();
- }
- if (messageQueue.Transactional)
- {
- MessageQueueTransaction mqt = new MessageQueueTransaction();
- mqt.Begin();
- messageQueue.Send(new Message(entity), mqt);
- messageQueue.Send(new Message(ent), mqt);
- messageQueue.Send(new Message(msg), mqt);
- mqt.Commit();
- }
- }
3、读取消息(使用Receive,读后删除)
1)非事务同步读取
- /// <summary>
- /// 读取消息并删除
- /// </summary>
- /// <returns></returns>
- public Message Receive()
- {
- messageQueue.Formatter = new BinaryMessageFormatter();
- try
- {
- return messageQueue.Receive(new TimeSpan(, , ));
- }
- catch (Exception ex)
- {
- throw;
- // return new Message(ex.Message);
- }
- }
2)异步的读取(略)
至于其它方法都是差不多的,也不做代码说明了。主要是Message类中的Body属性是对象的信息承载体。
最后:关于MSMQ在具体项目中的应用还是比较期待的,希望有朝一日能在真实项目中用上,这才是重点。
MSMQ学习笔记的更多相关文章
- MSMQ学习笔记一——概述
一.MSMQ是什么 Message Queuing(MSMQ) 是微软开发的消息中间件,可应用于程序内部或程序之间的异步通信.主要的机制是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为M ...
- MSMQ学习笔记二——创建Message Queue队列
一.创建Message Queue队列的主要流程 1.定义MQQUEUEPROPS 结构: 2.设置消息队列属性: 3.初始化MQQUEUEPROPS 结构: 4.调用MQCreateQueue创建队 ...
- Redis学习笔记~目录
回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...
- 【转】Spring.NET学习笔记——目录
目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...
- Spring.NET学习笔记——目录(原)
目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
随机推荐
- Hdu 4539 【状态DP】.cpp
题意: 一个炮兵可以攻打和他之间曼哈顿距离为2的士兵,给出你一块n*m的战场,告诉你哪些地方可以站人哪些地方不可以,问你最多可以安放多少个士兵? n <= 100, m <= 10 思路: ...
- Json与Java对象互转之Gson学习
Json与Java对象互转之Gson学习 请尊重他人的劳动成果.转载请注明出处:Json与Java对象互转之Gson学习 我曾在<XML,Object,Json转换之浅析Xstr ...
- hdu 1251 字典树模板题 ---多串 查找单词出现次数
这道题题目里没有给定数据范围 我开了2005 疯狂的WA 然后开了50000, A掉 我以为自己模板理解错 然后一天没吃饭,饿得胃疼还是想着把这题A掉再去吃,谁知竟然是这样的问题,,,呵呵~~~ ...
- hibernate学习——Set集合配置
Set集合的配置 数据表的创建:表关系一个员工拥有多个身份 create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VAR ...
- centos6.5安装nodejs
Preface(前言) 一次偶然的机会知道有nodejs这个东西,确实对它还是非常感兴趣的.刚開始仅仅知道它能让javascript写后台,然后前后台都由javascript来写,确实认为真的挺爽,毕 ...
- [Cocos2d-x v3.x]浅谈容器Vector
转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/19170853 前两天有人问我说在3.0 beta2版本号 ...
- bzoj1001/BJOI2006 灰太狼抓到的兔子
1001: [BeiJing2006]狼抓兔子(id=1001">传送门) 图论新知识..没学过.. 平面图最小割等于对偶图的最短路 详见课件:http://wenku.baidu.c ...
- Razor button
比起Web Form開發,在後端(.cs)寫法上大同小異,可選擇C#或VB.NET來撰寫:而在前端(.cshtml..vbhtml)則有比較大的差別,自 MVC3版本後,就以Razor為前端檢視引擎, ...
- Jenkins详细安装与构建部署使用教程(转)
Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布 ...
- tomcat 重启进程
查看端口: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat –apn 查看所有的进程和端口使用情况.发现下面的进程列表,其中最后一栏是 ...