消息队列--MSMQ应用(一)

    消息队列是什么?

    消息队列是在消息传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人 ,队列的主要目的是提供路由并保证消息的传递,如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功的传递它。


    MSMQ是什么?

    MSMQ是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。消息的发送者把自己想要发送的信息放入一个容器中,然后把它保存在一个系统共用的消息队列中,本地或者异地的消息接收程序再从该队列中取出发给他的消息进行处理。


    小编解读

    MSMQ是微软封装好的,消息队列的一种实现形式。


    ITOO用法解读

    

    上图中简要说明了MSMQ在ITOO中的位置,这里需要说的是

    1、mysql集群是布置在206和207上的,这里为了是图形简单明确把它抽象了出来。

    2、在没有MSMQ时,用户提交的数据会直接写到数据库,当同时有大量请求时,高并发严重,数据库产生存取瓶颈,程序崩溃。

    3、在使用MSMQ时,大量用户请求数据入队,进入消息队列中,自动排队,利用出队操作,想数据库中写入数据。

    4、当数据库发生故障时,用户提交的数据存储在消息队列中,程序正常运行,不影响用户体验,数据库恢复正常后,再做出队操作,向数据库中写入数据。


    MSMQ简单应用


        创建队列

        

<span style="font-size:18px;">            try
            {
                //创建队列

                if (!MessageQueue.Exists(@".\private$\myQueuetest"))
                {
                    MessageQueue.Create(@".\private$\myQueuetest");
                }
                else
                {
                    
                    MessageQueue myQueuetest = new MessageQueue(".\\private$\\myQueuetest");
                    //MessageBox.Show(@".\private$\myQueuetest" + "已经存在!");
                }
            }
            catch (MessageQueueException ex)
            {
                MessageBox.Show(ex.Message);
            }
</span>

    

        发送消息

<span style="font-size:18px;">            try
            {
                //连接到本地的队列
                //MessageQueue myQueuetest = new MessageQueue(".\\private$\\myQueuetest");
                MessageQueue myQueuetest = new MessageQueue(@"FormatName:Direct=TCP:192.168.22.232\private$\myQueuetest");
                System.Messaging.Message myMessage = new System.Messaging.Message();
                myMessage.Body = "zhengtao";
                myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
                //发送消息到队列中
                myQueuetest.Send(myMessage);
                MessageBox.Show("发送成功");
            }
            catch (ArgumentException ex)
            {
                MessageBox.Show(ex.Message);
            }
</span>


        接收消息

<span style="font-size:18px;">            //连接到本地队列
            //MessageQueue myQueuetest = new MessageQueue(".\\private$\\myQueuetest");
            //连接远程队列
            MessageQueue myQueuetest = new MessageQueue(@"FormatName:Direct=TCP:192.168.22.232\private$\myQueuetest");
            myQueuetest.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
            try
            {
                //从队列中接收消息
                System.Messaging.Message myMessage = myQueuetest.Receive();
                string context = (string)myMessage.Body; //获取消息的内容
                MessageBox.Show("消息内容为:" + context);
            }
            catch (MessageQueueException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (InvalidCastException ex)
            {
                MessageBox.Show(ex.Message);
            }
</span>


    这篇博客仅仅是描述了关于MSMQ的一些基本知识,以及一些最简单的用法,在实际的应用中我综合了多线程、事务与MSMQ一起使用,详情请看后续博客。

评论 46
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值