MSMQ 概述
MSMQ 概述
1) MSMQ概述
MSMQ 表示微软消息队列服务。MSMQ 可以工作在在线或者离线场景,并提供异步编程功能。如果客户端离线,MSMQ将会是最合适的方法,这是因为服务端不需要等待客户端读取数据并向服务端返回确认。
(2) 确定MSMQ 是否已经安装
通过在运行窗口执行"Services",然后找到Message Queuing. 如果没有就说明MSMQ 没有安装。
(3) MSMQ 安装
控制面板 -> 添加/删除Windows 组件 -- 选择消息队列 - 下一步
这将在你的系统中安装MSMQ,然后你可以通计算机管理来进行确认。
控制面板 -> 管理工具 -> 计算机管理 -> 服务和应用 -> 消息队列,
你将看到出栈队列,私有队列,系统队列,触发器。
(4) 消息类型
MSMQ 支持两种类型的消息: XML 和二进制, 下面的例子分别使用XML的二进制消息。
(5) MSMQ 架构(命名空间集成关系)
System
Messaging
Message
MessageQueue
MessageEnumerator
MessageType
MessagePriority
...
MSMQ 示例程序
示例 1 (使用 XmlMessageFormatter)
static void Main(string[] args)
{
MessageQueue messageQueue = null;
if (MessageQueue.Exists(@".\Private$\MyQueues"))
{
messageQueue = new MessageQueue(@".\Private$\MyQueues");
messageQueue.Label = "Testing Queue";
}
else
{
messageQueue = MessageQueue.Create(@".\Private$\MyQueues");
messageQueue.Label = "Newly Created Queue";
}
messageQueue.Send("First ever Message is sent to MSMQ", "Title");
messageQueue.Formatter = new XmlMessageFormatter(new string[] { "System.String" });
//iterating the queue contents
foreach (Message msg in messageQueue)
{
string readMessage = msg.Body.ToString();
Console.WriteLine(readMessage);
//process message
}
//after all processing delete the messages
messageQueue.Purge();
Console.ReadKey();
}
示例 2 (使用 BinaryMessageFormatter)
class Program
{
static void Main(string[] args)
{
CreateQueue(@".\Private$\ImageQueue");
SendMessage();
ReceiveMessage();
Console.ReadKey();
}
public static void CreateQueue(string queuePath)
{
try
{
if (!MessageQueue.Exists(queuePath))
{
MessageQueue.Create(queuePath);
}
else
{
Console.WriteLine(queuePath + " already exists.");
}
}
catch(MessageQueueException e)
{
Console.WriteLine(e.Message);
}
}
//Send an image to a queue, using the BinaryMessageFormatter.
public static void SendMessage()
{
try
{
//Create new bitmap.
//File must be in \bin\debug or \bin\release folder
//Or a full path to its location should be given
MessageQueue myQueue = new MessageQueue(@".\Private$\ImageQueue");
Image myImage = Bitmap.FromFile("MyImage.jpg");
Message msg = new Message(myImage, new BinaryMessageFormatter());
myQueue.Send(msg);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
//Receive a message that contains an image.
public static void ReceiveMessage()
{
try
{
MessageQueue myQueue = new MessageQueue(@".\Private$\ImageQueue");
myQueue.Formatter = new BinaryMessageFormatter();
Message myMessage = myQueue.Receive();
Bitmap myImage = (Bitmap)myMessage.Body;
myImage.Save("NewImage.jpg", ImageFormat.Jpeg);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
在这个例子中我们将一个JPG图片文件存储到MSMQ队列,它可以在接下来的步骤中被接收然后使用。
运行这个程序并确认是否"NewImage.Jpg" 文件在Debug或者Release 文件夹中被创建。
消息由一个主体(body)和若干属性构成。消息的主体可以由文本、二进制构成,根据需要还可以被加密。在MSMQ 中消息的大小不能够超过4MB
消息类型是一个对象
myMessage.Body = book;
myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(MSMQ.App.Book) });
接收消息为对象的数据
Book book = (Book)myMessage.Body; //获取消息的内容
优先级
message.Priority = MessagePriority.Highest; //最高消息优先级
------------------------
message.Label = tbName.Text;
message.Body = tbContext.Text;
if (cbPriority.Checked)
{
message.Priority = MessagePriority.Highest;
}
else
{
message.Priority = MessagePriority.Normal;
}
myQueue.Send(message);
MessageBox.Show("成功发送消息到队列");
消息3个维度 Label Body Priority
MSMQ 概述的更多相关文章
- MSMQ菜鸟教程
一 .MSMQ概述 MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于 ...
- MSMQ学习笔记一——概述
一.MSMQ是什么 Message Queuing(MSMQ) 是微软开发的消息中间件,可应用于程序内部或程序之间的异步通信.主要的机制是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为M ...
- WCF学习之旅—WCF概述(四)
一.WCF概述 1) 什么是WCF? Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终 ...
- 【WCF--初入江湖】01 WCF编程概述
01 WCF编程概述 SOA的优点 1.服务独立于平台和工作环境.服务并不关心自己所处的环境,也不关心与之进行通信的服务所处的 环境. 2.服务相互隔离. 3.服务对协议.格式和传输中立. 4. ...
- WCF从零学习之WCF概述(一)
WCF从零学习之WCF概述(一) 一.WCF概述 我先了解了分布式应用程序开发,所谓分布式应用程序是指应用程序分布在不同计算机上,通过网络来共同完成一项任务.通常为服务器/客户端模式. 在WCF发布之 ...
- 【AR实验室】ARToolKit之概述篇
0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- .Net 大型分布式基础服务架构横向演变概述
一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...
随机推荐
- twitter ads_campaign management
下载链接
- Centos7更改网卡名称Eth0并配置静态IP
1.首先查看一下centos7的网卡名称 eno33554984 2.更改为centos7之前版本的网卡名称 3.更改网卡文件的名称 4.禁用可预测命名规则. 通过编辑 /etc/default/gr ...
- Leetcode167-Two Sum II Input array is sorted-Easy
Given an array of integers that is already sorted in ascending order, find two numbers such that the ...
- command not found shell returned 127
在 vim 修改某个文件后,退出时,报了如此一个错误.日志如下: 并不是什么大问题,只是在刚入坑 ssh 时,真的被人代入坑里了. # 强制退出并保存 :wq! 不是 :!wq,不知道有没有有缘的小伙 ...
- 网页title左边显示网页的logo图标
打开某一个网页会在浏览器的标签栏处显示该网页的标题和图标,当网页被添加到收藏夹或者书签中时也会出现网页的图标,怎么在网页title左边显示网页的logo图标呢? 方法1: 找一个或者作一个ico文件, ...
- activity 运行流程
图1 图2 图3 图四
- Python安装常见问题:ModuleNotFoundError: No module named '_ctypes' 解决办法
一般位于3.7以上版本编译安装时出错 缺少依赖包libffi-devel 在安装3.7以上版本时,需要一个新的libffi-devel包做依赖 解决方法: yum install libffi-dev ...
- .NetCore Session.Redis
首先创建ASP.NET CORE Web项目,然后按如下顺序操作.1.添加nuget程序包: Microsoft.AspNetCore.Session; Microsoft.AspNetCore.Da ...
- 排序——选择排序(java描述)
百度百科的描述如下:选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元 ...
- input 输入值的监听 禁止输入特殊字符
1.input 输入值的监听 //用于监听input的值变化(input的值产生变化才会触发事件) (function ($) { $.fn.watch = function (callback) ...