微软 消息队列 MessageQueue 简单使用

1.在服务电脑上打开 消息队列

①进入控制面板》程序》启用或关闭windows功能

②将需要的勾选(我自己全选了哈哈哈)

③我的电脑 右键 打开管理 见到消息队列 在专用队列上新建专用队列

⑤填写名称还有选择是否是事务性

好到这里就基本准备完成

下面就要使用队列 来发送消息

           //创建消息队列 并发送消息到队列
            try
            {
                //连接到本地新创建的队列
                MessageQueue myQueue = new MessageQueue(".\\private$\\test2");
                //创建一个消息
                System.Messaging.Message myMessage = new System.Messaging.Message();
                //给消息体赋值
                myMessage.Body = "你好我是消息体";
                myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
                //发送消息到队列中(创建队列时勾选了事务性之后 不能直接使用 public void Send(object obj) 这个方法 因为其不支持事务)

                // 我要使用下面这个支持事务的发送方法
                myQueue.Send(myMessage,System.Messaging.MessageQueueTransactionType.Single);

            }
            catch (ArgumentException ex)
            {
                Console.WriteLine(ex.Message);
            }

发完消息之后就要接收消息

消息的接受使用Receive()方法

但是该方法会阻塞线程

所以建议将其放到一个独立的线程中,不让其影响其他线程的运行

  

            //创建一个任务 让其不断的在接收消息队列发出的消息
            Task t = Task.Factory.StartNew(() => {
                while (true)
                {
                    //创建队列 要跟发消息的队列同一个名称
                    MessageQueue mq = new MessageQueue(@".\private$\test2");

                    // 如果不用多线程就会阻塞在Receive
                    System.Messaging.Message m = mq.Receive();

                    //定义内容格式
                    m.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });

                    //接收到消息后 回去更新主线程的UI界面
                    Action<String> AsyncUIDelegate = delegate (string n)
                    {
                        this.ReceiveText2.Text = n; //对ui的操作
                    };//定义一个委托
                    this.ReceiveText2.Invoke(AsyncUIDelegate, new object[] { m.Body.ToString() });
                }
            });

测试效果:

啊啊啊啊 要记住勾选了事务性 不要用send(object ) 这个方法呀

				
时间: 2024-08-09 08:43:18

微软 消息队列 MessageQueue 简单使用的相关文章

微软消息队列

转至网络: 事务性消息传递发送和接收应用程序表示要在一个事务范围内发送或检索消息,这称为事务性消息传递.在事务范围之外发送或检索消息称为非事务性消息传递.仅当采用一种使所有任务(包括非消息队列操作)全部成功或全部失败的方式执行任务时,才使用事务性消息. 事务的特点体现在其 ACID(原子性.持续性.隔离性.持久性)属性: 原子性.原子性指事务的全部行为或无行为.当事务包含一系列操作时,所有操作将被作为一个单独的操作对待,要么成功完成,要么根本不执行. 持续性.事务将系统从一个有效状态转换到另外一

【转】MSMQ 微软消息队列 简单 示例

MSMQ它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中:本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理. 我个人的理解,你可以把他当做一种,把数据打包后,发送到一个地方,程序也可以去取到这个打包的程序,队列的机制就不讲了,并发问题荡然无存.呵呵. 上代码: 首先 using System.Messaging; public class MsmqManagerHe

.net微软消息队列(msmq)简单案例

1.首先我们需要安装消息队列服务,它是独立的消息记录的服务,并保存在硬盘文件中. 我们添加名为:DMImgUpload的私有消息队列. 2.定义消息队列的连接字符串建议采用IP: (1)FormatName:DIRECT=OS:Pac_gzf-PC\Private$\DMImgUpload (2)FormatName:DIRECT=TCP:192.168.1.105\Private$\DMImgUpload string queuePath="FormatName:DIRECT=TCP:192.

微软消息队列MSMQ 传输异常的总结!

公司线上环境99%是esxi的虚拟环境,随着公司线上虚拟机的增加,在部署虚拟机时我们一般都是采用模板才统一部署,当一个模板建立好后,新建虚拟机时就默认采用该模版运行,没有加入用户自定义环节. 由于公司为软件型企业且百分之九十采用的是微软的.net开发用户平台,由于平台的特殊性需要和多方面机构进行数据交换工作,根据开发的环境特点,选用的是微软系统自带的消息队列MSMQ进行数据传输, 随着msmq服务器越来越多的上线,而且会多台服务器往一台服务器上发送消息,最近频繁的发现一个问题,服务器服务正常,各

【消息队列】-简单了解

消息队列 概念 例子 有一天,产品跑来说:"我们要做一个用户注册功能,需要在用户注册成功后给用户发一封成功邮件." 小明(攻城狮):"好,需求很明确了." 不就提供一个注册接口,保存用户信息,同时发起邮件调用,待邮件发送成功后,返回用户操作成功.没一会功夫,代码就写完了.验证功能没问题后,就发布上线了. 线上正常运行了一段时间,产品匆匆地跑来说:"你做的功能不行啊,运营反馈注册操作响应太慢,已经有好多用户流失了." 小明听得一身冷汗,赶紧回去改.

消息队列的简单理解

消息队列,MessageQueue,简称MQ. 消息队列有什么用? 解耦 .削峰 .异步 解耦:将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统不需要做任何修改. 异步:将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度.削峰:系统慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息. 消息队列的通讯模式 1) 点对点通讯:点对点方式是最为传统和常见的通讯方式,它支持一对一.一对多.多对多.多对一等多种配置方式,支持树状.网状等多种拓扑结构. 2) 多点广播:

使用windows消息队列MessageQueue

Config中appSettings配置: <--本地消息队列时 value=".\PRIVATE$\MgrApiRequest"/>--> <add key="RequestQueueName" value="FormatName:Direct=TCP:192.168.100.102\PRIVATE$\MgrApiRequest" /> 消息队列连接,将order类资料加入消息队列中: MessageQueue m

消息队列的简单实现

消息队列:一个进程向另一个进程发送数据块 消息队列基于消息,管道基于字节流 消息队列是用链表实现 1.创建:int megget(key_t key, int msgflag)     key:函数ftok()的返回值     msgflag:IPC_CREAT是创建新的消息队列:IPC_EXCL与IPC_CREAT一起使用,即如果要创建的消息队列已存在,则返回错误     成功:返回队列标识符     失败:-1 2.获取:ssize_t msgrcv(int msqid, void *msg

WCF分布式开发必备知识(1):MSMQ消息队列

本章我们来了解下MSMQ的基本概念和开发过程.MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间的任一位置.它的实现原理是:消息的发送者要把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中,本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理.其中两个重要的概念