博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MSMQ的简单使用
阅读量:4920 次
发布时间:2019-06-11

本文共 3303 字,大约阅读时间需要 11 分钟。

static readonly string mqname=@".\Private$\MSMQ1"; if (!MessageQueue.Exists(mqname))//判断私有消息是否存在            {                MessageQueue.Create(mqname, false);            }        private void CreateThread()        {            t = new Thread(() =>            {                while (true)                {                    var mq = new MessageQueue(mqname);                    System.Messaging.Message message = new System.Messaging.Message();                    //为了避免存放消息队列的计算机重新启动而丢失消息,可以通过设置消息对象的Recoverable属性为true,                    //在消息传递过程中将消息保存到磁盘上来保证消息的传递,默认为false。                     //message.Recoverable = true;                    message.Body = new Apple { Name = DateTime.Now.ToString(), Price = r.Next() * 100 };                    message.Formatter = new XmlMessageFormatter(new Type[] { typeof(Apple) });                    mq.Send(message);                    Thread.Sleep(1000);                }            });            t.IsBackground = true;        }

  

static readonly string mqname = @"FormatName:Direct=TCP:192.168.0.21\Private$\MSMQ1";        static ManualResetEvent signal = new ManualResetEvent(false);        //static int count = 0;        static void Main(string[] args)        {            var mq = new MessageQueue(mqname);            mq.Formatter= new XmlMessageFormatter(new Type[] { typeof(Apple) });            // Add an event handler for the ReceiveCompleted event.            mq.ReceiveCompleted +=new ReceiveCompletedEventHandler(MyReceiveCompleted);            mq.BeginReceive();            //mq.PeekCompleted += Mq_PeekCompleted;            //mq.BeginPeek();            //signal.WaitOne();            Console.ReadKey();        }        private static void Mq_PeekCompleted(object sender, PeekCompletedEventArgs e)        {            try            {                // Connect to the queue.                MessageQueue mq = (MessageQueue)sender;                Message m = mq.EndPeek(e.AsyncResult);                Apple a = (Apple)m.Body;                Console.WriteLine(a.Price.ToString() + "\t" + a.Name);                        mq.BeginPeek();            }            catch (MessageQueueException)            {                            }        }        private static void MyReceiveCompleted(object sender, ReceiveCompletedEventArgs e)        {            try            {                MessageQueue mq = (MessageQueue)sender;                            Message m = mq.EndReceive(e.AsyncResult);                Apple a = (Apple)m.Body;                Console.WriteLine(a.Price.ToString()+"\t"+a.Name);                      mq.BeginReceive();                            }            catch (MessageQueueException)            {            }                   }

msdn手册:https://msdn.microsoft.com/zh-cn/library/system.messaging.messagequeue.beginpeek(v=vs.80).aspx

MSMQ 跨服务器读写队列的“消息队列系统的访问被拒绝”的解决方案:

服务器上消息队列权限设置:给ANONYMOUS LOGON赋予所有权限;

修改服务器的注册表,允许非验证客户端访问

注册表新增HKLM\Software\Microsoft\MSMQ\Parameters\security\AllowNonauthenticatedRpc项,设置其DWORD值为1

注册表新增HKLM\Software\Microsoft\MSMQ\Parameters\security\NewRemoteReadServerDenyWorkgroupClient项,设置其DWORD值为1

 

MSMQ的安全访问控制说明参见:http://msdn.microsoft.com/en-us/library/4108f68e-80f5-40e1-b3df-b713cc4dff79(prot.20).aspx

 

peek和receive的区别:receive后消息队列清空;peek不清空。

转载于:https://www.cnblogs.com/tgdjw/p/5763658.html

你可能感兴趣的文章
分布式系统整理
查看>>
RocketMQ整理
查看>>
Spring框架整理
查看>>
HashMap 1.8 核心源码分析
查看>>
Redis中3种特殊的数据类型
查看>>
算法:通过堆排序,获取前N个最大数
查看>>
c#/netcore/mvc视图中调用控制器方法
查看>>
c# 匿名类型获取值
查看>>
Windows安装使用npm(Nodejs)
查看>>
小技巧
查看>>
position 定位属性,对div进行位置布局
查看>>
模板语法标签继承关系
查看>>
overflow,overflow-x,overflow-y 用法
查看>>
css3中的calc()
查看>>
DJango ORM相关笔记
查看>>
Django模板,变量,标签,过滤器,自定义标签过滤器
查看>>
Django-forms效验组件
查看>>
python装饰器
查看>>
npm常用命令
查看>>
python常用模块-re 正则表达式
查看>>