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

背景

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

简单理解

感觉这里的消息队列还是一个典型的“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-08-05 14:52:17

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

阿里Java面试题剖析:为什么使用消息队列?消息队列有什么优点和缺点?

面试题 为什么使用消息队列?消息队列有什么优点和缺点?Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析其实面试官主要是想看看: 第一,你知不知道你们系统里为什么要用消息队列这个东西?不少候选人,说自己项目里用了 Redis.MQ,但是其实他并不知道自己为什么要用这个东西.其实说白了,就是为了用而用,或者是别人设计的架构,他从头到尾都没思考过.没有对自己的架构问过为什么的人,一定是平时没有思考的人,面试官对这类候选人印象通常很不好.

让工作线程具有消息队列和消息循环

Android的消息队列和消息循环都是针对具体线程的,一个线程可以存在一个消息队列和消息循环,特定线程的消息只能分发给本线程,不能跨线程和跨进程通讯.但是创建的工作线程默认是没有消息队列和消息循环的,如果想让工作线程具有消息队列和消息循环,就需要在线程中先调用Looper.prepare()来创建消息队列,然后调用Looper.loop()进入消息循环.下面是我们创建的工作线程: class WorkThread extends Thread { public Handler mHandler;

[转]【收藏】用消息队列和消息应用状态表来消除分布式事务

真正有了这样的需求,可以借鉴. 转自:http://csrd.aliapp.com/?p=671 由于数据量的巨大,大部分Web应用都需要部署很多个数据库实例.这样,有些用户操作就可能需要去修改多个数据库实例中的数据.传统的解决方法是使用分布式事务保证数据的全局一致性,经典的方法是使用两阶段提交协议. 长期以来,分布式事务提供的优雅的全局ACID保证麻醉了应用开发者的心灵,很多人都不敢越雷池一步,想像没有分布式事务的世界会是怎样.如今就如MySQL和PostgreSQL这类面向低端用户的开源数据

.net微软消息队列(msmq)简单案例

1.首先我们需要安装消息队列服务,它是独立的消息记录的服务,并保存在硬盘文件中. 我们添加名为:DMImgUpload的私有消息队列. 2.定义消息队列的连接字符串建议采用IP: (1)FormatName:DIRECT=OS:Pac_gzf-PC\Private$\DMImgUpload (2)FormatName:DIRECT=TCP:192.168.1.105\Private$\DMImgUpload string queuePath="FormatName:DIRECT=TCP:192.

消息队列 (2) java实现简单的RabbtMQ

假设有如下问题: 1.如果消费者连接中断,这期间我们应该怎么办? 2.如何做到负载均衡? 3.如何有效的将数据发送到相关的接收者?就是怎么样过滤 4.如何保证消费者收到完整正确的数据 5.如何让优先级高的接收者先收到数据 一."Hello RabbitMQ" 如图:P代表生产者,C代表消费者,红色部分为消息队列 二.项目开始 1.首先创建一个maven项目,然后导入rabbitMQjar包 <?xml version="1.0" encoding="

python 实现多个线程间消息队列传递,一个简单的列子

#-*-coding:utf8-*-"""Producer and consumer models: 1. There are many producers and consumers at the same time, but they complement each other. Implemented by message queuing to achieve at the same time production and consumpion processing.

(转)(二)RabbitMQ消息队列-RabbitMQ消息队列架构与基本概念

http://blog.csdn.net/super_rd/article/details/70238869 没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. RabbitMQ架构 说是架构其实更像是应用场景下的架构(自己画的有点丑,勿嫌弃) 从图中可以看出RabbitMQ主要由Exchange和Queue两部分组成,然后通过RoutingKey关联起来,消息投递到Exchange然后通过Queue接收. RabbitMQ消息队列基本概

【消息队列】消息队列选型问题

上一篇我们探讨了为什么使用消息队列,以及消息队列的缺点.今天我们来探讨一下我们到底该使用哪一种消息队列.没有最好的技术只有最合适的技术,不要为了追求最好的性能而忽略了可用性,时刻记住“过早优化是原罪” 先说结论: 中小型公司,技术实力较为一般,技术挑战不是特别高,用RabbitMQ是不错的选择:大型公司,基础架构研发实力较强,用RocketMQ是很好的选择 如果是大数据领域的实时计算.日志采集等场景,用Kafka是业内标准 截止到目前为止,现在业界流行的消息队列中间件有: Redis Activ

day41——多进程的消息队列、消息队列pipe

多进程的消息队列 消息队列指的是消息在传输过程中保存消息的容器 消息队列最经典的用法是消费者和生产者之间通过消息管道来传递消息.消费者和和生产者是不同的进程,生产者往管道中写消息,消费者从管道中读消息 multiprocessing模块提供了Queue类 和 Pipe函数 实现消息队列 1. Queue 用法: In [1]: import multiprocessing In [2]: help(multiprocessing.Queue) Help on function Queue in