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

原创 2016年08月30日 17:50:16

    消息队列是什么?

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


    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一起使用,详情请看后续博客。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

基于消息的分布式架构

随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不...
  • whs_321
  • whs_321
  • 2016年06月29日 16:00
  • 500

使用JAVA向微软消息队列(MSMQ)发送和接收消息

直接进入主题 一、安装MSMQ,可按照下面博客安装 安装MSMQ 二、在MSMQ中创建队列 ① ② ③修改队列的权限(测试的时候全部勾上吧) 三、下载msmqJava所需的jar包和dl...

MSMQ 消息队列、监听MSMQ消息、消息扫描

namespace FSMP.PTS.MSMQ { public class MSMQHelper     {         ///          /// MSMQ服务地址配置       ...

消息队列(MSMQ)

System.Messaging命名空间包含的类可以用windows操作系统的Message Queuing功能读写信息。消息传送功能可以在断开连接的环境下作用。在同步编程中,调用一个方法时,调用者必...

【消息队列】MSMQ(二)——消息处理流程

一、前言      上一篇博客简单的向大家介绍了一下MSMQ的一些简单的概念。所以在这篇博客中小编就和大家一起进行一些对消息的处理,包括了创建消息、发送消息、接收消息、异步消息处理。其中整体上还是比较...

计算机网络中传输速率 带宽 吞吐量三者的区别

1.传输速率: 定义:在数据传输中,两个设备之间数据流动的物理速度成为传输速率,单位为bps。 计算:比特是数据量最小单位,秒是时间的最小单位, 所以速率单位为bps。类似的,有kb/s,Mb/s...

MSMQ消息队列演示程序

  • 2008年04月29日 13:18
  • 30KB
  • 下载

MSMQ消息队列

  • 2017年07月26日 17:48
  • 126KB
  • 下载

MSMQ?不,太弱了。使用ActiveMQ实现消息队列服务

关于MSMQ和ActiveMQ的基础功能就不再描述。这里说说ActiveMQ的比较实用的一个功能:ScheduledMessage ScheduledMessage可以理解为一个调度功能,可以延时、重...

msmq消息队列多线程

  • 2015年07月18日 15:48
  • 113KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:消息队列--MSMQ应用(一)
举报原因:
原因补充:

(最多只允许输入30个字)