一、安装Message Queue:

在Win7之前,控制面板,添加删除组件(Windows Message Queue)。

Win7~Win8:控制面板,程序和功能,启用或关闭Windows功能(找到Windows Message Queue服务器)选项,连同所有子类一并勾上即可,自动安装。

二、使用Message Queue:

1)用于各类服务器、计算机之间的通讯:

本地,自己给自己发(直接是.\\Private$\\Queue的私有名字)。

远程计算机:

FormatName:Direct=TCP:121.0.0.1\\private$\\Queue名字
FormatName:Direct=OS:machinename\\private$\\Queue名字 (仅用于远程加了域的计算机)。
FormatName:DIRECT=http://222.10.xx.xx/msmq/Private$/Queue名字

注意:FormatName必须大小写完全按照红色的写法!"Direct"可以随意。

2)默认情况下,Queue会收到该组全部信息。有时候我们需要跨域但是指定某台计算机收到特定信息(比如N台有1,2,3……N编号的计算机都连接到某个服务器Queue,但是不同计算机有唯一编号,我发送的信息只发送给特定的计算机编号)。那么可以使用System.Message(使用前必须引用该类库)的Label,代码如下(包含收到消息后删除该信息,防止Queue里东西越来越多):

此案例是在我本人计算机上运行,界面上一个“发送”按钮和2个文本框(分别接受Label为1和2的消息),防止时间演示过长,使用了异步机制。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Messaging;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Msg = System.Messaging.Message; namespace MessageQueueDemo
{
public partial class Form1 : Form
{ public Form1()
{
InitializeComponent();
} private async Task<string> GetMessage(string labelId)
{
List<Msg> msgs = new List<Msg>();
//监听当前自己计算机上的私有队列
MessageQueue msgQueue = new MessageQueue(@".\private$\myQueue");
string result = null;
Random r = new Random(); await Task.Run(() =>
{
//使用该方法允许您动态删除Queue
var me = msgQueue.GetMessageEnumerator2();
Msg tmpMsg = null; for (IEnumerator pointer = me; pointer.MoveNext();)
{
//先返回当前的Queue
tmpMsg = (Msg)pointer.Current;
//如果该Label是符合当前文本框可以接受的Id,删除该Msg
if (tmpMsg.Label == labelId)
{
tmpMsg = me.RemoveCurrent();
//模拟接收的时间不同
Thread.Sleep(r.Next(, ));
//必须指定每一个Msg的存储信息格式
tmpMsg.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
msgs.Add(tmpMsg);
//必须加上去,因为删除当前的Msg之后不使用“重置”,导致MoveNext为false。
me.Reset();
}
}
if (msgs.Count > )
{
result = string.Join(",", (from m in msgs
select m.Body.ToString()));
}
});
return result;
} private async void button1_Click(object sender, EventArgs e)
{
//初始化已经创建的Queue
MessageQueue msgQueue = new MessageQueue(@".\private$\myQueue");
//模拟发送Msg(1和2交替发送)
for (int i = ; i < ; i++)
{
Msg message = new Msg(i % == ? "" : "", new XmlMessageFormatter(new Type[] { typeof(string) })); //Send第一个参数:发送的消息对象;第二个参数:Label
                 msgQueue.Send(message, i %  ==  ? "" : "");
            }

            //异步接收
var content1 = await GetMessage("");
var content2 = await GetMessage("");
textBox2.Text = content1;
textBox3.Text = content2;
}
}
}

Message Queue基本使用说明的更多相关文章

  1. 初识Message Queue之--基础篇

    之前我在项目中要用到消息队列相关的技术时,一直让Redis兼职消息队列功能,一个偶然的机会接触到了MSMQ消息队列.秉着技术还是专业的好为原则,对MSMQ进行了学习,以下是我个人的学习笔记. 一.什么 ...

  2. MSMQ(Microsoft Message Queue)

    http://www.cnblogs.com/sk-net/archive/2011/11/25/2232341.html 利用 MSMQ(Microsoft Message Queue),应用程序开 ...

  3. Message Queue vs. Web Services?

    From stackoverflow.com When you use a web service you have a client and a server: If the server fail ...

  4. hdu 1509 Windows Message Queue

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1509 Windows Message Queue Description Message queue ...

  5. 为什么要用Message Queue

    摘录自博客:http://dataunion.org/9307.html?utm_source=tuicool&utm_medium=referral 为什么要用Message Queue 解 ...

  6. 单线程模型中Message、Handler、Message Queue、Looper之间的关系

    1. Android进程 在了解Android线程之前得先了解一下Android的进程.当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程.默认的情况下,所有该程序的组件都 ...

  7. Top 10 Uses of a Message Queue

    Top 10 Uses of a Message QueueAsynchronicity, Work Dispatch, Load Buffering, Database Offloading, an ...

  8. hdoj 1509 Windows Message Queue【优先队列】

    Windows Message Queue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  9. 详解boost库中的Message Queue .

    Message Queue(后文简写成MQ或消息队列)是boost库中用来封装进程间通信的一种实现,同一台机器上的进程或线程可以通过消息队列来进行通迅.消息队列中的消息由优先级.消息长度.消息数据三部 ...

随机推荐

  1. XE5应用开发支持的安卓设备

    XE5应用开发支持的安卓设备 A.官方文档声明 RADStudio 支持Android设备的应用开发,android版本从2.3到4.3.x,ARMv7处理器,MEON支持.根据Embarcadero ...

  2. [示例] Firemonkey 画出 1 点像素的线

    说明:在 Firemonkey 在移动平台 Android & iOS 要直接在 Canvas 画出 1 点像素的线,似乎有点困难,不过利用一点小技巧,还是能达到这个要求的,首先要建立一个 B ...

  3. JAVA IO总结及socket简单实现

    为了方便理解与阐述,先引入两张图: a.Java IO中常用的类 在整个Java.io包中最重要的就是5个类和一个接口.5个类指的是File.OutputStream.InputStream.Writ ...

  4. selenium爬取网易云

    from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.c ...

  5. NVIDIA GTC照片

    这次的NVIDIA GPU Technology Conference 2014在美国San Jose(就是俗称的硅谷了)举办. 去美国的飞机上10个小时反正是睡不着,电影还是挺好看的. 美联航的早餐 ...

  6. Mysql内置功能《三》视图

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  7. Mysql数据操作《二》单表查询

    单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 关键字的执行 ...

  8. [AIR] AS3读取txt文档

    package { import flash.display.Sprite; import flash.events.Event; import flash.filesystem.File; impo ...

  9. word的xml文件中空白页和换页

    ■ word中分页符(插入空白页): <w:r>                    <w:rPr>                    <w:rFonts w:as ...

  10. CocoaPods的PodSpec.json文件用法

    最近有时候用最新的CocoaPod的第三方库,有时候发现CocoaPod.org能搜到那个Podfile,但是每次在终端Pod search xxx,每次都搜不到,原来是本地的Podspec没用更新, ...