RabbitMQ 消息队列 入门 第一章

RabbitMQ :

官网:https://www.rabbitmq.com/

GitHub:https://github.com/rabbitmq?q=rabbitmq

第一步安装:

  1. 点击  http://www.erlang.org/downloads  下载 erlang  安装。
  2. 点击 https://www.rabbitmq.com/download.html 进入下载页面选择版本下载。
  3. 菜单查找  RabbitMQ Service - start.exe 点击运行服务。

开始使用:

  1. 新建控制台项目
  2. 添加引用

    

    3.建立生产者

    

        /// <summary>
        /// 消息生产者
        /// </summary>
        /// <param name="message">消息</param>
        public static void RabbitProducerTest(string message)
        {
            try
            {
                //创建连接工广场
                ConnectionFactory factory = new ConnectionFactory()
                {
                    HostName = "localhost",
                    Port = 5672,
                };
                //实例化连接
                using (var connection = factory.CreateConnection())
                {
                    //创建通道
                    using (var channel = connection.CreateModel())
                    {
                        //声明队列
                        channel.QueueDeclare(queue: "hello",
                                            durable: false,
                                            exclusive: false,
                                            autoDelete: false,
                                            arguments: null);

                        var body = Encoding.UTF8.GetBytes(message);

                        //消息推送
                        channel.BasicPublish(exchange: "",
                                             routingKey: "hello",
                                             basicProperties: null,
                                             body: body);
                        Console.WriteLine("{1} Sent {0}", message,DateTime.Now.ToString());
                    }//# using channel end
                }//# using connection end
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine("HelloWordTest -- Error Press [enter] to cuntinue.");
                Console.ReadLine();
            }
        }
//循环发送消息
static void Main(string[] args)
        {

            while (true)
            {
                Console.WriteLine("press enter your message [enter] to send");
                string message = Console.ReadLine();
                RabbitMQTest.RabbitProducerTest(message);
            }
        }

  4.建立消费者(新建另外一个控制台程序)

 /// <summary>
        /// 消息消费者
        /// </summary>
        public static void RabbitComsumerTest()
        {
            try
            {
                ConnectionFactory factory = new ConnectionFactory()
                {
                    HostName = "localhost",
                    Port = 5672
                };
                using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        channel.QueueDeclare(queue: "hello",
                                             durable: false,
                                             exclusive: false,
                                             autoDelete: false,
                                             arguments: null);
                        //给通道创建消费者
                        var consumer = new EventingBasicConsumer(channel);
                        //消费者事件/行为
                        consumer.Received += (model, ea) =>
                        {
                            Console.WriteLine(string.Format("{0} Received a message", DateTime.Now.ToString()));
                            var body = ea.Body;
                            var message = Encoding.UTF8.GetString(body);
                            Console.WriteLine("Message Content:{0}", message);
                        };
                        channel.BasicConsume(queue: "hello",
                                             autoAck: true,
                                             consumer: consumer);
                        Console.ReadLine();
                    }
                }
            }catch(Exception ex)
            {
                Console.WriteLine("发生异常:"+ex.Message);
                Console.ReadLine();
            }
        }        

static void Main(string[] args)
        {
            RabbitMQTest.RabbitComsumerTest();
        }

  5.同时运行两个程序

如果队列堆积,可开启多个消费者增加处理效率

  

原文地址:https://www.cnblogs.com/wuxiaozhu/p/9023385.html

时间: 2024-08-30 15:20:38

RabbitMQ 消息队列 入门 第一章的相关文章

(转)RabbitMQ消息队列(九):Publisher的消息确认机制

在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consumer处理呢?毕竟对于一些非常重要的数据,可能Publisher需要确认某个消息已经被正确处理. 在我们的系统中,我们没有是实现这种确认,也就是说,不管Message是否被Consume了,Publisher不会去care.他只是将自己的状态publish给上层,由上层的逻辑去处理.如果Message

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

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

RabbitMQ消息队列(九):Publisher的消息确认机制

在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consumer处理呢?毕竟对于一些非常重要的数据,可能Publisher需要确认某个消息已经被正确处理. 在我们的系统中,我们没有是实现这种确认,也就是说,不管Message是否被Consume了,Publisher不会去care.他只是将自己的状态publish给上层,由上层的逻辑去处理.如果Message

RabbitMQ消息队列1: Detailed Introduction 详细介绍

1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco .Redhat.iMatix 等联合制定了 AMQP 的公开标

RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

目录(?)[-] Exchanges Temporary queues Bindings绑定 最终版本 上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "publish / subscribe".    这篇文章中,我们将创建一个日志系统,它包含两个部分:第一个部分是发出log(Producer),第二个部分接收到并打印(Consumer). 我们将构建

RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)[转]

上篇文章中,我们把每个Message都是deliver(提供)到某个Consumer.在这篇文章中,我们将会将同一个Message deliver(提供)到多个Consumer中.这个模式也被成为 "publish / subscribe".     这篇文章中,我们将创建一个日志系统,它包含两个部分:第一个部分是发出log(Producer),第二个部分接收到并打印(Consumer). 我们将构建两个Consumer,第一个将log写到物理磁盘上:第二个将log输出的屏幕. 1.

消息队列入门(二)消息队列的开源实现

消息队列入门(二)消息队列的开源实现 关于AMQP AMQP 是 Advanced Message Queuing Protocol,即高级消息队列协议.AMQP不是一个具体的消息队列实现,而 是一个标准化的消息中间件协议.目标是让不同语言,不同系统的应用互相通信,并提供一个简单统一的模型和编程接口.目前主流的ActiveMQ和RabbitMQ都支持AMQP协议. AMQP相关的角色和职责 Producer 消息生产者 一个给exchange发送消息的程序,发送方式大致是:它首先创建一个空消息,

(转)RabbitMQ消息队列(六):使用主题进行消息分发

在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因,因为是仅仅能够通过severity设定.不支持更多的标准. 比如syslog unix的日志工具,它可以通过severity (info/warn/crit...) 和模块(auth/cron/kern...).这可能更是我们想要的:我们可以仅仅需要cron模块的log. 为了实现类似的功能,我们需

RabbitMQ消息队列(六):使用主题进行消息分发

在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因,因为是仅仅能够通过severity设定.不支持更多的标准. 比如syslog unix的日志工具,它可以通过severity (info/warn/crit...) 和模块(auth/cron/kern...).这可能更是我们想要的:我们可以仅仅需要cron模块的log. 为了实现类似的功能,我们需