Message Queue基本使用说明
一、安装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基本使用说明的更多相关文章
- 初识Message Queue之--基础篇
之前我在项目中要用到消息队列相关的技术时,一直让Redis兼职消息队列功能,一个偶然的机会接触到了MSMQ消息队列.秉着技术还是专业的好为原则,对MSMQ进行了学习,以下是我个人的学习笔记. 一.什么 ...
- MSMQ(Microsoft Message Queue)
http://www.cnblogs.com/sk-net/archive/2011/11/25/2232341.html 利用 MSMQ(Microsoft Message Queue),应用程序开 ...
- 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 ...
- hdu 1509 Windows Message Queue
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1509 Windows Message Queue Description Message queue ...
- 为什么要用Message Queue
摘录自博客:http://dataunion.org/9307.html?utm_source=tuicool&utm_medium=referral 为什么要用Message Queue 解 ...
- 单线程模型中Message、Handler、Message Queue、Looper之间的关系
1. Android进程 在了解Android线程之前得先了解一下Android的进程.当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程.默认的情况下,所有该程序的组件都 ...
- Top 10 Uses of a Message Queue
Top 10 Uses of a Message QueueAsynchronicity, Work Dispatch, Load Buffering, Database Offloading, an ...
- hdoj 1509 Windows Message Queue【优先队列】
Windows Message Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- 详解boost库中的Message Queue .
Message Queue(后文简写成MQ或消息队列)是boost库中用来封装进程间通信的一种实现,同一台机器上的进程或线程可以通过消息队列来进行通迅.消息队列中的消息由优先级.消息长度.消息数据三部 ...
随机推荐
- 推荐一款优秀的代码编辑软件--Source Insight
“工欲善其事,必先利其器”,好的工具能够提高我们办事的效率,进而提升团队乃至企业的竞争力. 对于软件开发工程师来说,选择一款优秀的代码编辑软件也是很重要的.最近,我看到有很多同事还在用微软的VC ++ ...
- First App on Phonegap | Cordova
Phonegap简介 PhoneGap是一能够让你用普通的web技术编写出能够轻松调用api接口和进入应用商店的 html5应用开发平台,是唯一支持7个平台的开源移动框架. 优势: 1.兼容性:多平台 ...
- Nginx使用
1. 基本使用 分linux和windows版 windows版可以直接双击exe运行,默认配置为80端口,只有两个页面 html目录下为页面.css.js等代码文件 conf目录下为配置文件 主要的 ...
- Eclipse搭建Android开发环境(安装ADT,Android4.4.2)
1.检查是否安装JDK, 如果没安装请下载安装 JDK官网http://www.Oracle.com/technetwork/Java/javase/downloads/index.html 2.下载 ...
- linux命令之网络管理命令(下)
1.wget:命令行下载工具 该命令用于从网络上下载资料,可以直接从网络上下载自己所需要的资料. 参数 说明 -O(常用) 指定保存的文件名后下载文件 --limit-rate(常用) 限速下载 -c ...
- tf-idf sklearn
第一步:语料转化为词袋向量 step 1. 声明一个向量化工具vectorizer: 本文使用的是CountVectorizer,默认情况下,CountVectorizer仅统计长度超过两个字符的词, ...
- TVS
TVS 电子电路中二极管是非常常见的元器件,按照材料主要分为锗二极管.硅二极管.按用途的不同又可分为瞬态二极管.整流二极管.检波二极管.稳压二极管.变容二极管.光电二极管.发光二极管.开关二极管.快速 ...
- 【lojg152】 乘法逆元 2(数学)
题面 传送门 题解 orz Wa自动机 这是一个可以\(O(n)\)求出\(n\)个数逆元的方案 先把所有的数做一个前缀积,记为\(s_i\) 然后我们用快速幂求出\(s_n\)的逆元,记为\(sv_ ...
- mysqli扩展库应用---程序范例
通过mysqli扩展库对用户表user1进行增删改查操作,用户表user1结构如下: 1,建立数据库操作类库mysqliTool.class.php,代码如下: <?php class mysq ...
- [AIR] AS3读取txt文档
package { import flash.display.Sprite; import flash.events.Event; import flash.filesystem.File; impo ...