消息队列(一)——消息的简单发送与接收

    背景

          开发者经常遇到需要异步执行操作的情况(即过程不等到操作完成就开始)。消息队列提供一个中心位置或池,您可以在其中放置或从中提取数据,从而满足了这一要求。一个应用程序能够把消息存放在队列中,然后继续自己的业务,另一个应用程序在运行时再提取这些数据。

  简单理解

                

           感觉这里的消息队列还是一个典型的“buffer”思想:即就像喝水一样,如果有一杯水,我可能就直接喝掉了;但是如果有一壶水,我可能要先把水倒进杯子,然后再从杯子里喝水。

           消息队列在这里起到了个杯子的作用。

代码示例

       建立消息队列并发送一条消息

                           

          

            Message msg = null; //对列发送或读取的实际消息或数据
            MessageQueue mq = null; //接收/发送消息的MSMQ消息队列

            try
            {
                msg = new Message();
                msg.Priority = MessagePriority.Normal;//普通消息的优先级
                if (!MessageQueue.Exists(@".\Private$\TechRepublic"))
                {
                    mq = MessageQueue.Create(@".\Private$\TechRepublic");
                } //如果不存在则创建它
                else
                {
                    mq = new MessageQueue(@".\Private$\TechRepublic");
                }
                msg.Label = "Test Message";
                msg.Body = "this is only a test";
                mq.Send(msg);
                Console.WriteLine("message sent");

            }
            catch (System.Messaging.MessageQueueException ex)
            {

                Console.WriteLine("MSMQ Error:" + ex.ToString());
            }
            catch (Exception ex)
            {

                Console.WriteLine("error:" + ex.ToString());

            }
            finally
            { mq.Close(); }

 

       接收消息

              

 Message msg = null;
                MessageQueue mq = null;
                try
                {
                    mq = new MessageQueue(@".\Private$\Tepublic");
                    msg = mq.Receive(new TimeSpan(0, 0, 3));//timespan对象指定异常出现时系统的等待时间。
                    msg.Formatter = new XmlMessageFormatter(new string[] { "System.String,mscorlib" }); //对象被转换成字符串读取前面存储的文本
                    mq.Receive(); //从队列中读取消息,它的值显示在控制台中
                    Console.WriteLine(msg.Label.ToString() + "__" + msg.Body.ToString());

                }
                catch (System.Messaging.MessageQueueException ex)
                {

                    Console.WriteLine("MSMQ Error"+ex.ToString());
                }
                catch(Exception ex)
                {

                    Console.WriteLine("Error:"+ex.ToString());
                }finally
                {

                    mq.Close();

                }

          未完待续,具体问题还没分析~

       

时间: 2024-09-28 13:33:33

消息队列(一)——消息的简单发送与接收的相关文章

System V 消息队列—复用消息

消息队列中的消息结构可以由我们自由定义,具备较强的灵活性.通过消息结构可以共享一个队列,进行消息复用.通常定义一个类似如下的消息结构: #define MSGMAXDAT 1024 struct mymsg { long msg_len; //消息长度 long msg_type; //消息类型 long msg_data[MSGMAXDATA]; //消息内容 };  消息结构相关联的类型字段(msg_type)提供了两个特性: (1)标识消息,使得多个进程在单个队列上复用消息. (2)用作优

Handler详解系列(二)——主线程向自身消息队列发消息

MainActivity如下: package cc.c; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.w

linux 消息队列-Linux消息队列使用时,msgsnd()一直不能通过,大家帮忙看看!

问题描述 Linux消息队列使用时,msgsnd()一直不能通过,大家帮忙看看! #include #include #include #include #include #include #include #include #define QUEUE1 100 #define QUEUE2 101 /* redefine struct msg_buf */ struct msgmbuf{ //msg type long mtype; //the field used to store URL

Android创建简单发送和接收短信应用

本文实例为大家分享了Android创建发送和接收短信应用的简单实现过程,供大家参考,具体内容如下 一.接收短信 项目的结构如下:一个简单的接收和发送短信的功能 1.定义一个接收短信的广播:当手机接收到一条短信的时候,系统会发出一条值为android.provider.Telephony.SMS_RECEIVED 的广播,这条广播里携带着与短信相关的所有数据. // 接收短信的广播 class MessageReceiver extends BroadcastReceiver { @Overrid

Linux进程间通信——使用消息队列

下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处.有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信--使用命名管道   一.什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法.  每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构.我们可以通过发送消息来避免命名管道的同步和阻塞问题.但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制.   Linux用宏MSGMAX和MSGMNB来限制

IPC——消息队列

Linux进程间通信--使用消息队列 下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处.有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信--使用命名管道   一.什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法.消息队列是消息的链接表,存放在内核中并由消息队列标识符标识.  每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构.我们可以通过发送消息来避免命名管道的同步和阻塞问题(命名管道要读端和

消息队列在VB.NET数据库开发中的应用

数据|数据库 我们先简单的了解一下什么是消息队列(MSMQ)?消息队列是 Windows 2000(NT也有MSMQ,WIN95/98/me/xp不含消息队列服务但是支持客户端的运行)操作系统中通讯的基础,也是用于创建分布式.松散连接通讯应用程序的工具.这些应用程序可以通过不同种类的网络进行通讯,也可以与脱机的计算机通讯.消息队列分为用户创建队列和系统队列,用户队列分为: · "公共队列"在整个可传递消息的"消息队列"网络中复制并传输,并且有可能由网络连接的所有站点

Linux进程间通信学习:如何使用消息队列

下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处.有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信--使用命名管道 一.什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法.  每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构.我们可以通过发送消息来避免命名管道的同步和阻塞问题.但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制. Linux用宏MSGMAX和MSGMNB来限制一条消息

当设计消息队列时我们关心什么

应用消息队列可以对系统进行解耦,流量削峰,在分布式系统设计中,消息队列是重要的组件之一. 在开发中应用过ActiveMQ,kafka等mq,不过对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现特别重要, 比如对一致性等实现的关注,可以帮助我们在开发中避免踩坑,规避问题的出现.这篇文章简单探讨下当设计和实现一个消息队列时,我们需要关心哪些地方.   消息队列功能和特性 一个传统意义上的消息队列,需要支持消息的发送,接受和消息暂存的功能. 在实际应用中,对消息队列的要求远不止于此,在不同