.net msmq消息队列实例详解

本文为大家分享了.net msmq消息队列实例代码,供大家参考,具体内容如下

1.msmq消息队列windows环境安装

控制面板----》程序和功能----》启用或关闭Windows程序----》Microsoft Message Queue(MSMQ)服务器

选中如图所示功能点击“确认”进行安装,安装好后可在 “计算机管理”中进行查看

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 = 1; i <= 10; 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$

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • RabbitMQ .NET消息队列使用详解
  • .Net消息队列的使用方法
(0)

相关推荐

  • RabbitMQ .NET消息队列使用详解

    本文实例为大家分享了RabbitMQ .NET消息队列使用方法,供大家参考,具体内容如下 首先下载安装包,我都环境是win7 64位: 去官网下载 otp_win64_19.0.exe  和rabbitmq-server-3.6.3.exe安装好 然后开始编程了: (1)创建生产者类: class Program { private static void Main() { //建立RabbitMQ连接和通道 var connectionFactory = new ConnectionFacto

  • .Net消息队列的使用方法

    .Net使用消息队列,借助windows组件来存储要完成的一系列任务,不用程序使用同一个队列,方便不同程序之间的数据共享和协作-- 以本人经验,这个在某个方面类似于session(当然还有很多方面不同),相同之处:session可以把信息存储在aspnet_state服务中,网站重新编译或者重新启动网站,session不会丢失(session超时是正常情况,这种情况除外). win7中安装消息队列组件,其他操作系统请百度搜索相关资料. 如果服务没有自动启动,需要启动服务: 先创建队列,再使用队列

  • .net msmq消息队列实例详解

    本文为大家分享了.net msmq消息队列实例代码,供大家参考,具体内容如下 1.msmq消息队列windows环境安装 控制面板---->程序和功能---->启用或关闭Windows程序---->Microsoft Message Queue(MSMQ)服务器 选中如图所示功能点击"确认"进行安装,安装好后可在 "计算机管理"中进行查看 2.创建消息队列实体对象 /// <summary> /// 消息实体 /// </summ

  • windows消息和消息队列实例详解

    本文详细讲述了windows消息和消息队列的原理与应用方法.分享给大家供大家参考.具体分析如下: 与基于MS - DOS的应用程序不同,Windows的应用程序是事件(消息)驱动的.它们不会显式地调用函数(如C运行时库调用)来获取输入,而是等待windows向它们传递输入. windows系统把应用程序的输入事件传递给各个窗口,每个窗口有一个函数,称为窗口消息处理函数.窗口消息处理函数处理各种用户输入,处理完成后再将控制权交还给系统.窗口消息处理函数一般是在注册一个窗口的时候指定的.你可以从典型

  • Android 消息队列模型详解及实例

    Android 消息队列模型详解及实例 Android系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列(Message Queue)和一个消息循环(Looper).Android中除了UI线程(主线程),创建的工作线程默认是没有消息循环和消息队列的.如果想让该线程具有消息队列和消息循环,并具有消息处理机制,就需要在线程中首先调用Looper.prepare()来创建消息队列,然后调用Looper.loop()进入消息循环.如以下代码所示: class

  • python处理按钮消息的实例详解

    python处理按钮消息的实例详解            最新学习Python的基础知识,在论坛中看到不错的实例,这里记录下,也希望能帮助到大家, 效果图: 实现代码: import win32ui import win32con from pywin.mfc import dialog classMyDialog(dialog.Dialog): defOnInitDialog(self): dialog.Dialog.OnInitDialog(self) self.HookCommand(se

  • C++ 中"priority_queue" 优先级队列实例详解

    C++ 中"priority_queue" 优先级队列实例详解 1. 简介 标准库队列使用了先进先出(FIFO)的存储和检索策略. 进入队列的对象被放置在尾部, 下一个被取出的元素则取自队列的首部. 标准库提供了两种风格的队列: FIFO 队列(FIFO queue, 简称 queue), 以及优先级队列(priority queue). priority_queue 允许用户为队列中存储的元素设置优先级. 这种队列不是直接将新元素放置在队列尾部, 而是放在比它优先级低的元素前面. 标

  • python分布式爬虫中消息队列知识点详解

    当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方.那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的资源,当然这个是一定的次序的,不然数据获取就会出现重复.就下来我们就python分布式爬虫中的消息队列进行详细解释,小伙伴们可以进一步了解一下. 实现分布式爬取的关键是消息队列,这个问题以消费端为视角更容易理解.你的爬虫程序部署到很多台机器上,那么他们怎么知道自己要爬什么呢?总要有一个地方存储了他们

  • C++ 中"priority_queue" 优先级队列实例详解

    C++ 中"priority_queue" 优先级队列实例详解 1. 简介 标准库队列使用了先进先出(FIFO)的存储和检索策略. 进入队列的对象被放置在尾部, 下一个被取出的元素则取自队列的首部. 标准库提供了两种风格的队列: FIFO 队列(FIFO queue, 简称 queue), 以及优先级队列(priority queue). priority_queue 允许用户为队列中存储的元素设置优先级. 这种队列不是直接将新元素放置在队列尾部, 而是放在比它优先级低的元素前面. 标

  • 进程间通信之深入消息队列的详解

    最近在Hi3515上调试Qt与DVR程序,发现他们之间使用消息队列通信的,闲暇之余,就总结了一下消息队列,呵呵,自认为通俗易懂,同时,在应用中也发现了消息队列的强大之处. 关于线程的管理(互斥量和条件变量)见:Linux线程管理必备:解析互斥量与条件变量的详解 一.消息队列的特点 1.消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识.    2.消息队列允许一个或多个进程向它写入与读取消息.    3.管道和命名管道都是通信数据都是先进先出的原则.    4.消息队列可以

  • SpringCloud Stream消息驱动实例详解

    1. 消息驱动概述 1.1 是什么 在实际应用中有很多消息中间件,比如现在企业里常用的有ActiveMQ.RabbitMQ.RocketMQ.Kafka等,学习所有这些消息中间件无疑需要大量时间经历成本,那有没有一种技术,使我们不再需要关注具体的消息中间件的细节,而只需要用一种适配绑定的方式,自动的在各种消息中间件内切换呢?消息驱动就是这样的技术,它能 屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型. SpringCloud Stream是一个构件消息驱动微服务的框架.应用程序通过i

随机推荐