首先在windows系统中安装MSMQ

一、MSMQ交互

开发基于消息的应用程序从队列开始。MSMQ包含四种队列类型:

  • 外发队列:消息发送到目的地之前,用它来临时存储消息。
  • 公共队列:在主动目录中公布。整个网络各种服务器上的应用程序能够通过主动目录找到并应用公共队列。
  • 私有队列:这些是本地服务器上的队列,对其它服务器无效(因此这些队列不在主动目录中公布。)
  • 系统队列:包含日记队列(由系统生成)、死队列和事务型死信队列。死消息无法传送。

System.Messaging命名空间执行MSMQ的编程操作。这个命名空间有两个主要的对象:

  • Message:队列发送或读取的实际消息或数据。
  • MessageQueue:接收/发送消息的MSMQ消息队列。

二、消息队列类型

消息对列分为3类:
 
公共队列
 MachineName\QueueName
 能被别的机器所访问,如果你的多个项目中用到消息队列,那么你可以把队列定义为公共队列
 
专用队列
 MachineName\Private$\QueueName
 只针对于本机的程序才可以调用的队列,有些情况下为了安全起见定义为私有队列。
日志队列
 MachineName\QueueName\Journal$

然后编写以下代码:

消息的发送:

  class Program
{
static void Main(string[] args)
{
Message msg = null;
MessageQueue mq = null;
int count = ;
if (MessageQueue.Exists(@".\Private$\TechRepublic"))
{
MessageQueue.Delete(@".\Private$\TechRepublic");
}
while (true)
{
count++; try
{
msg = new Message();
msg.Priority = MessagePriority.Normal;
if (!MessageQueue.Exists(@".\Private$\TechRepublic"))
{
mq = MessageQueue.Create(@".\Private$\TechRepublic");
}
else
{
mq = new MessageQueue(@".\Private$\TechRepublic");
}
msg.Label = "Test Message" + count;
Product p = new Product
{
Id = count,
Name = "name"+count,
CreateTime = DateTime.Now
};
msg.Body = p;
mq.Send(msg);
Console.WriteLine(p.Id); }
catch (System.Messaging.MessageQueueException ex)
{
Console.WriteLine("MSMQ Error: " + ex.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.ToString());
} } #region 发送简单的类型
//try
//{
// mq = new MessageQueue(@".\Private$\TechRepublic");
// msg = mq.Receive(new TimeSpan(0, 0, 60));
// msg.Formatter = new XmlMessageFormatter(new String[] { "System.String,mscorlib" });
// //mq.Receive();
// Console.WriteLine(msg.Label.ToString() + " -- " + msg.Body.ToString());
//}
//catch (System.Messaging.MessageQueueException ex)
//{
// Console.WriteLine("MSMQ Error: " + ex.ToString());
//}
//catch (Exception ex)
//{
// Console.WriteLine("Error: " + ex.ToString());
//}
//finally
//{
// mq.Close();
//}
#endregion
Console.ReadKey();
}
}

消息的接收:

 class Program
{ static void Main(string[] args)
{
Message msg = null;
MessageQueue mq = null; while (true)
{
Thread.Sleep();
try
{
if (MessageQueue.Exists(@".\Private$\TechRepublic"))
{
mq = new MessageQueue(@".\Private$\TechRepublic");
//#region 同步接收消息
//if (mq.GetAllMessages().Any())
//{
//msg = mq.Receive(new TimeSpan(0, 0, 60));
////通过Receive方法接收消息同时永久性地从队列中删除消息;
////通过Peek方法从队列中取出消息而不从队列中移除该消息。
//msg.Formatter = new XmlMessageFormatter(new String[] { "MyLib.Product,MyLib" });
//Product p = ((Product)msg.Body);
//Console.WriteLine(msg.Label.ToString() + " -- " + p.Id + " ---" + p.CreateTime);
//}
//#endregion #region 异步接收消息 //利用委托机制:
if (mq.GetAllMessages().Any())
{
mq.BeginReceive();
mq.ReceiveCompleted += mq_ReceiveCompleted;
}
#endregion } }
catch (System.Messaging.MessageQueueException ex)
{
Console.WriteLine("MSMQ Error: " + ex.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.ToString());
}
} Console.ReadKey();
} static void mq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
MessageQueue mq = (MessageQueue)sender;
Message msg = mq.EndReceive(e.AsyncResult);
msg.Formatter = new XmlMessageFormatter(new String[] { "MyLib.Product,MyLib" });
Product p = ((Product)msg.Body);
Console.WriteLine(msg.Label.ToString() + " -- " + p.Id + " ---" + p.CreateTime);
mq.BeginReceive();//如果希望继续异步接收消息,请在 ReceiveCompleted 事件处理程序中再次调用 BeginReceive 方法
}
}
namespace MyLib
{
[Serializable]
public class Product
{
public long Id { get; set; }
public string Name { get; set; }
public DateTime CreateTime { get; set; }
public DateTime? UpdateTime { get; set; }
}
}

微软MSMQ消息队列的使用的更多相关文章

  1. 【转】MSMQ消息队列安装

    一.Windows 7安装.管理消息队列1.安装消息队列   执行用户必须要有本地 Administrators 组中的成员身份,或等效身份.   具体步骤:    开始—>控制面板—>程 ...

  2. MSMQ消息队列安装

    一.Windows 7安装.管理消息队列1.安装消息队列   执行用户必须要有本地 Administrators 组中的成员身份,或等效身份.   具体步骤:    开始—>控制面板—>程 ...

  3. 【6】.net msmq消息队列实例

    1.msmq消息队列windows环境安装 控制面板---->程序和功能---->启用或关闭Windows程序---->Microsoft Message Queue(MSMQ)服务 ...

  4. MSMQ消息队列 用法

    引言 接下来的三篇文章是讨论有关企业分布式开发的文章,这三篇文章筹划了很长时间,文章的技术并不算新,但是文章中使用到的技术都是经过笔者研究实践后总结的,正所谓站在巨人的肩膀上,笔者并不是巨人,但也希望 ...

  5. WCF分布式开发必备知识(1):MSMQ消息队列

    本章我们来了解下MSMQ的基本概念和开发过程.MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一 ...

  6. 跟我一起学WCF(1)——MSMQ消息队列

    一.引言 Windows Communication Foundation(WCF)是Microsoft为构建面向服务的应用程序而提供的统一编程模型,该服务模型提供了支持松散耦合和版本管理的序列化功能 ...

  7. C#实战Microsoft Messaging Queue(MSMQ)消息队列(干货)

    前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代 ...

  8. MSMQ消息队列

    MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一 ...

  9. C#实战Microsoft Messaging Queue(MSMQ)消息队列

    前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代 ...

随机推荐

  1. word20161129

    1. nested 英[nestɪd]美[nestɪd]adj. 嵌套的;v. 筑巢( nest的过去式和过去分词 );[例句]In the makeGrades method I use a cod ...

  2. 15 BasicHashTable基本哈希表类(二)——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...

  3. 11.3---旋转有序数组之后查找元素(CC150)

    思路,这道题用二分,唯一的不同就是,1,a[left]<a[mid].那么说明左右有序,如果key还在a[left],a[mid]之间,就在这里找,如果不在就在右边找.注意:这里<要改成& ...

  4. TortoiseGit 添加邮箱 失败保存配置

    解决方法   将保存至改为此版本库

  5. mysql 日志文件mysql-bin文件清除方法,和mysql-bin相关文件的配置

    默认情况下mysql会一直保留mysql-bin文件,这样到一定时候,磁盘可能会被撑满,这时候是否可以删除这些文件呢,是否可以安全删除,是个问题. 首先要说明一下,这些文件都是mysql的日志文件,如 ...

  6. MYSQL 的错误Incorrect information in file: '.\test\stuff.frm

    用eos 重新数据库初始化 会出现这个错误 然后 把 mysql 的 两个日志文件删除就行.第一次不知道怎么g搞,花了一下午的时间重装了mysql.5.0. 删除文件 >>>> ...

  7. CSS——display和float

    1.display 属性规定元素应该生成的框的类型. 值 描述 none 此元素不会被显示. block 此元素将显示为块级元素,此元素前后会带有换行符. inline 默认.此元素会被显示为内联元素 ...

  8. Linq to 泛型集合查询集合包括大写M和年龄小于等于18

    #region Linq to 泛型集合查询集合包括大写M和年龄小于等于18            //List<Student> list = new List<Student&g ...

  9. Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试

    最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...

  10. Python 之 【markdown 模块的学习】

    摘要: markdown工具,可以将txt转化成html格式.这一类工具的作用是将按一定格式写成的可读性强的文本文件转化为结构化的标准xhtml或html.Linux 下面也有markdown: zh ...