RabbitMQ初探 001——初识RabbitMQ 01

栏目: 后端 · 发布时间: 5年前

内容简介:1、序言对于一个网站系统的评估,大家说的最多的就是:高可用,高并发。对于高可用,比如全年无故障率99.99%;比如热发布等等。对于高并发,按tps来衡量。对于高并发的解决方案大多会提到消息队列系统。那我们先选定一个常用的队列系统来看看如何使用,然后再总结消息队列系统的主要功能,最后能根据实际业务情况开发出适合自己场景的消息队列系统。我们先从认识RabbitMQ队列系统开始。

1、序言

对于一个网站系统的评估,大家说的最多的就是:高可用,高并发。对于高可用,比如全年无故障率99.99%;比如热发布等等。对于高并发,按tps来衡量。对于高并发的解决方案大多会提到消息队列系统。那我们先选定一个常用的队列系统来看看如何使用,然后再总结消息队列系统的主要功能,最后能根据实际业务情况开发出适合自己场景的消息队列系统。

我们先从认识RabbitMQ队列系统开始。

RabbitMQ是一个在AMQP(即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制)基础上完成的,可复用的企业消息系统,是一个开源的项目。

2、环境准备

博主电脑是windows的,所以以windows7 64位环境,并且使用.net core作为demo程序演示。

安装Erlang

下载地址,

官网: http://www.erlang.org/downloads

本文示例程序使用的下载地址: https://download.csdn.net/download/yysyangyangyangshan/10925984

安装RabbitMQ

下载地址,

官网: http://www.rabbitmq.com/install-windows.html

本文示例程序使用的下载地址: https://download.csdn.net/download/yysyangyangyangshan/10925911

安装成功后,在开始菜单可见,如图

RabbitMQ初探 001——初识RabbitMQ 01

找到 RabbitMQ Comman Prompt,运行。依次运行如下命令:

rabbitmq-service install

rabbitmq-service enable

rabbitmq-service start

执行结果分别如下所示:

RabbitMQ初探 001——初识RabbitMQ 01

RabbitMQ初探 001——初识RabbitMQ 01

RabbitMQ初探 001——初识RabbitMQ 01

然后,执行

rabbitmq-plugins enable rabbitmq_management即可成功安装,

RabbitMQ初探 001——初识RabbitMQ 01

使用默认账号密码(guest/guest)登录http://localhost:15672/即可。

RabbitMQ初探 001——初识RabbitMQ 01

本地管理页面.png

这样,环境准备OK了。

3、做一个Demo

消息队列的模型是这样的:

RabbitMQ初探 001——初识RabbitMQ 01

3.1、消息的发送和接收

用.net core 来实现发送和接收端的简单逻辑。在实现前先要下载一个dll,RabbitMQ的.net core驱动。

下载地址: https://download.csdn.net/download/yysyangyangyangshan/10925942

.net core实现接收端的逻辑,

新建一个控制台程序:RabbitMQReceiver,整体结构如下,

RabbitMQ初探 001——初识RabbitMQ 01

主要代码:

class Program
    {
        static void Main(string[] args)
        {
            //1.实例化连接工厂
            var factory = new ConnectionFactory() { HostName = "localhost" };
            //2. 建立连接
            using (var connection = factory.CreateConnection())
            {
                //3. 创建信道
                using (var channel = connection.CreateModel())
                {
                    //4. 申明队列
                    channel.QueueDeclare(queue: "myQueueReceiver", durable: false, 
                        exclusive: false, autoDelete: false, arguments: null);
                    //5. 构造消费者实例
                    var consumer = new EventingBasicConsumer(channel);
                    //6. 绑定消息接收后的事件委托
                    consumer.Received += (model, ea) =>
                    {
                        var message = Encoding.UTF8.GetString(ea.Body);
                        Console.WriteLine(" [x] 接收 {0}", message);
                        Thread.Sleep(6000);//模拟耗时
                        Console.WriteLine(" [x] 结束");
                    };
                    //7. 启动消费者
                    channel.BasicConsume(queue: "myQueueReceiver", noAck: true, consumer: consumer);
                    Console.WriteLine(" 按 [回车] 退出程序.");
                    Console.ReadLine();
                }
            }
        }
    }

.net core来实现发送端的逻辑,

新建一个控制台程序:RabbitMQSender,整体结构如下,

RabbitMQ初探 001——初识RabbitMQ 01

主要代码:

 class Program
    {
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            {
                //3. 创建信道
                using (var channel = connection.CreateModel())
                {
                    //4. 申明队列
                    channel.QueueDeclare(queue: "myTestQueueSender", durable: false, exclusive: false, 
                        autoDelete: false, arguments: null);
                    //5. 构建byte消息数据包
                    string message = args.Length > 0 ? args[0] : "你好,欢迎使用RabbitMQ!";
                    var body = Encoding.UTF8.GetBytes(message);
                    //6. 发送数据包
                    //routingKey必须是接收的队列名。
                    //本程序为例,队列名是:myQueueReceiver
                    channel.BasicPublish(exchange: "", routingKey: "myQueueReceiver", basicProperties: null, body: body);
                    Console.WriteLine(" [x] 发送 {0}", message);
                    Console.ReadLine();
                }
            }
        }
    }

注意RabbitMQSender中,routingKey: "myQueueReceiver",一定是接收方的队列名。

先执行接收端,再执行发送端,如下图

发送端,

RabbitMQ初探 001——初识RabbitMQ 01

接收端

RabbitMQ初探 001——初识RabbitMQ 01

可多次启动sender端发送消息,比如,在本地使用了两次sender程序,在管理页面会有记录,

RabbitMQ初探 001——初识RabbitMQ 01

在本地管理页面中可以看到消息投递的记录,

代码下载: https://download.csdn.net/download/yysyangyangyangshan/10926426


以上所述就是小编给大家介绍的《RabbitMQ初探 001——初识RabbitMQ 01》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创业维艰

创业维艰

本·霍洛维茨 Ben Horowitz / 杨晓红、钟莉婷 / 中信出版社 / 2015-2 / 49

本·霍洛维茨,硅谷顶级投资人,与网景之父马克·安德森联手合作18年,有着丰富的创业和管理经验。2009年创立风险投资公司A16Z,被外媒誉为“硅谷最牛的50个天使投资人”之一,先后在初期投资了Facebook、Twitter、Groupon、Skype,是诸多硅谷新贵的创业导师。 在《创业维艰》中,本·霍洛维茨从自己的创业经历讲起,以自己在硅谷近20余年的创业、管理和投资经验,对创业公司(尤......一起来看看 《创业维艰》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具