一、安装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(() =>{//使用该方法允许您动态删除Queuevar me = msgQueue.GetMessageEnumerator2();Msg tmpMsg = null;for (IEnumerator pointer = me; pointer.MoveNext();){//先返回当前的QueuetmpMsg = (Msg)pointer.Current;//如果该Label是符合当前文本框可以接受的Id,删除该Msgif (tmpMsg.Label == labelId){tmpMsg = me.RemoveCurrent();//模拟接收的时间不同Thread.Sleep(r.Next(100, 500));//必须指定每一个Msg的存储信息格式tmpMsg.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });msgs.Add(tmpMsg);//必须加上去,因为删除当前的Msg之后不使用“重置”,导致MoveNext为false。
                        me.Reset();}}if (msgs.Count > 0){result = string.Join(",", (from m in msgsselect m.Body.ToString()));}});return result;}private async void button1_Click(object sender, EventArgs e){//初始化已经创建的QueueMessageQueue msgQueue = new MessageQueue(@".\private$\myQueue");//模拟发送Msg(1和2交替发送)for (int i = 1; i < 11; i++){Msg message = new Msg(i % 2 == 0 ? "1" : "2", new XmlMessageFormatter(new Type[] { typeof(string) }));

                 //Send第一个参数:发送的消息对象;第二个参数:Label
                 msgQueue.Send(message, i % 2 == 0 ? "1" : "2");
            }//异步接收var content1 = await GetMessage("1");var content2 = await GetMessage("2");textBox2.Text = content1;textBox3.Text = content2;}}
}

转载于:https://www.cnblogs.com/ServiceboyNew/p/4668567.html

Message Queue基本使用说明相关推荐

  1. Message、Handler、Message Queue、Looper之间的关系

    2019独角兽企业重金招聘Python工程师标准>>> 在单线程模型下,为了解决线程通信问题,Android设计了一个通信机制.Message Queue(消息队列), 线程间的通信 ...

  2. MSMQ(Microsoft Message Queue)介绍

    利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信.消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的 ...

  3. HDOJ 1509 Windows Message Queue

    Windows Message Queue Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Othe ...

  4. 远程调用服务(RPC)和消息(Message Queue)对比及其适用/不适用场合

    在阿里的平台技术部参与开发了Dubbo(远程调用服务)和Napoli(消息解决方案),又给网站应用支持这2个产品很长一段时间,了解了这2个产品的实现及应用对这两个产品的用法. 大部分情况下," ...

  5. Message Queue中的推与拉(转)

    Message Queue的设计和实现(7) http://mp.weixin.qq.com/s/zQdDBAHu1UgJJzxH2eCHgQ 数据发送中的推与拉. 当MQ要把数据给消费者的时候,就涉 ...

  6. Windows Message Queue(优先队列)

    欢迎参加--BestCoder周年纪念赛(高质量题目+多重奖励) Windows Message Queue Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  7. MQ(Message Queue)简介

    一.何为MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传 ...

  8. MSMQ(MicroSoft Message Queue,微软消息队列)

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

  9. 【ZOJ - 2724】【HDU - 1509】Windows Message Queue(优先队列)

    题干: Message queue is the basic fundamental of windows system. For each process, the system maintains ...

  10. 消息队列-Message Queue

    消息队列-Message Queue 目前随着互联网的普及以及上网用户的增多,拥有一套 安全.稳定.低耦合.高性能的内部通信工具尤为重要. 什么是消息队列? 消息队列(英语:Message queue ...

最新文章

  1. [pyinstaller] “RuntimeError: No metadata path found for distribution ‘greenlet‘
  2. 智慧城市不是“交钥匙”工程 信息技术是根本
  3. 弗尤博客(十一)之搜索博文
  4. php项目数据库控制器代码_如何为大型代码库组织Express控制器
  5. Python Gensim Word2Vec
  6. 深度学习 --- 受限玻尔兹曼机RBM(MCMC和Gibbs采样)
  7. Week2——XML
  8. Ros学习笔记(四)创建Ros消息
  9. [深入研究4G/5G/6G专题-35]: URLLC-6-《中国联通5G URLLC技术白皮书3.0版本》解读-2-无线侧关键技术
  10. java面经大全,献给每一个努力过,在努力以及将要努力的人。goodlucky。2018-10-15开始更新
  11. Udacity机器学习入门笔记——数据集与问题
  12. Redis键-值数据库 nosql 数据建模(3)------ 如何存储主从表数据 一对多关系
  13. 夜神模拟器apk安装方式
  14. 相机快门之:电子快门
  15. python如何把ts视频拼接起来_Python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频...
  16. java软件更改背景颜色_Java应用程序-右击时弹出swing-更改背景颜色
  17. Nexus Windows中搭建Nexus仓库
  18. Elasticsearch 基于地理位置的搜索查询
  19. 计算机光驱图标符号,电脑不显示光驱图标怎么解决
  20. 实用软件工程课后答案 (张海潘 吕云翔)

热门文章

  1. java web教室管理系统_“真香”教程,455集全套java视频教程,自己拿走去学习吧...
  2. qt 限制一段时间内对button只能点按一次_299元入手拓牛智能垃圾桶,用第一次想退货,第三天我上瘾了...
  3. 全国计算机一级考试难度高吗,计算机等级考试分几级 考试难度大不大
  4. 包无法安装_BiocManager无法安装R包
  5. 一.第一周golang学习:--string解析成基本数据类型
  6. golang语言示例:--->下载网站的json文件,同时对文件进行分析输出
  7. python文件目录操作-2
  8. 11gpath失败 oracle_win10安装oracle11g提示path长度不够,该怎样解决?
  9. win10必须禁用的服务_关闭这几个系统服务,让你的电脑不再卡!
  10. 引入ELK前需要知道的“坑”(上)