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

原创 2016年08月30日 19:27:31

    上篇博客,仅仅是讲了MSMQ的简单应用,在实际的应用过程中,往往是要复杂一些的。

    首先,拿评教系统来说,我设计的具体流程为下图

    


    小编详解

    1、图中的两个评教学生端,都是我们的学生端代码,不同的是他们表示的是不同的模块,“数据提交MSMQ”表示的学生端的用户提交模块,表示将用户数据提交到MSMQ服务器;“事务结束”表示的是从队列中取值,插入数据库。

    2、在MSMQ中用不用事务的区别在于:无事务只是将记录写到缓存,数据容易丢失,有事务时会将记录写到缓存和磁盘,如果缓存中的数据丢失,MSMQ自动从磁盘恢复数据。但不用事务的效率大概是使用事务的2倍。

    3、将出队操作和向数据库插入数据中加入数据,是为了保持数据的一致性,避免数据已经出队,但并没有插入数据表等情况。

    4、此处的委托由事件触发,出队操作完成时,触发出队操作完成事件,委托给向数据库插入的方法,执行插入操作。


    部分代码

<span style="font-size:18px;">           //将任务添加到线程池
            ThreadPool.QueueUserWorkItem(o =>
            {
                //连接队列
                MessageQueue myQueue = new MessageQueue(@"FormatName:Direct=TCP:192.168.22.232\private$\myQueue");
             
                    while (true)
                    {
                       
                        //实例化消息队列事务对象
                        MessageQueueTransaction myTransaction = new MessageQueueTransaction();

                        //使用委托,接收消息完成的时候执行myreceivecompleted方法
                        myQueue.ReceiveCompleted += new ReceiveCompletedEventHandler(MyReceiveCompleted);
                       
                        //反序列化
                        myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(evaluationassesscoursenumentity) });
                        //事务开始
                        myTransaction.Begin();
                      
                        //没有限时操作的接收消息
                        IAsyncResult abc = myQueue.BeginReceive();
                        //提交事务
                        myTransaction.Commit();
                    }
            });
        }</span>


        委托的插入方法

<span style="font-size:18px;">       private static void MyReceiveCompleted(Object source, ReceiveCompletedEventArgs asyncResult)
          {
            
            MessageQueue myQueue = (MessageQueue)source;
            //完成指定的异步接收操作
            System.Messaging.Message message = myQueue.EndReceive(asyncResult.AsyncResult);
            evaluationassesscoursenumentity transformassesscoursenum = message.Body as evaluationassesscoursenumentity;

            
            var CopyWXEvaluationStudentAssess = DependencyResolver.Current.GetService<WXEvaluationStudentAssessController>();
            //调用相应的方法,将队列的值插入数据库
            bool flag = CopyWXEvaluationStudentAssess.AddAssessNum(transformassesscoursenum);
           
            myQueue.Receive();
        }
</span>

    消息队列的介绍就先到这里,小编才疏学浅,有出入的地方,请大牛们多多指教。

    

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

Delphi下MSMQ(Mircosoft Message Queue)实例(私有队列)

 网上关于消息队列技术原理说明的详细文档很多,但涉及到Delphi的具体实现很少,这是我从网上找了一上午的资料,自己整合和尝试的能运行的程序。打开控制面板->程序->添加组件,添加消息队列打开控制面板...
  • houhu_cs
  • houhu_cs
  • 2010年02月21日 17:04
  • 3296

Delphi下使用MSMQ类库实现发送和接收的类,带实例

  • 2013年02月25日 14:56
  • 24KB
  • 下载

windows 消息队列Microsoft Message Queue (MSMQ)实例

windows 消息队列 实现:发送消息、接收消息、多线程监听消息
  • zss793648186
  • zss793648186
  • 2016年07月06日 22:37
  • 1196

SPRING.NET 1.3.2 学习2--快速入门应用示例说明

Movie Finder:一个使用依赖注入运用Spring IOC容器的例子Application Context:演示了IoC容器特性如定位、访问ResourceSet对象、应用资源到对象属性Asp...
  • lee576
  • lee576
  • 2013年02月28日 11:28
  • 2972

MSMQ的安装

基于MCF开发一个白板交互系统,在使用类MessageQueue创建消息队列的时总是提示出错,原来是MSMQ没有安装,MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不...
  • saloon_yuan
  • saloon_yuan
  • 2013年06月29日 21:42
  • 3072

MSMQ-发送消息到远程专用队列path格式

在工作组模式下,远程访问专用队列。在网上找到一篇文章,翻译了一下。 最后结论,直接使用多元素格式名方式,利用IP地址直接对单个或多个目标发送消息      MessageQueue rmQ...
  • CsethCRM
  • CsethCRM
  • 2014年04月14日 13:23
  • 3441

消息队列MSMQ的使用实例

  消息队列:是在消息传输过程中保存消息的容器。MSMQ是Microsoft的消息处理技术,运行平台为Microsoft Windows操作系统。它分为用户队列和系统队列。在用户队列中又分为专用队列:...
  • Linux7985
  • Linux7985
  • 2010年12月31日 17:09
  • 4335

Message Queuing (MSMQ)

Message Queuing (MSMQ) technology enables applications running at different times to communicate acr...
  • gjw198276
  • gjw198276
  • 2013年03月11日 11:12
  • 1616

微软消息队列MSMQ示例

  • 2008年11月04日 20:50
  • 14KB
  • 下载

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

消息队列是什么?     消息队列是在消息传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人 ,队列的主要目的是提供路由并保证消息的传递,如果发送消息时接收者不可用,...
  • zt15732621796
  • zt15732621796
  • 2016年08月30日 17:50
  • 828
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:消息队列--MSMQ应用(二)
举报原因:
原因补充:

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