RabbitMQ初探 001——初识RabbitMQ 01

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

内容简介: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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

About Face 3

About Face 3

Alan Cooper、Robert Reimann、David Cronin / John Wiley & Sons / 2007-5-15 / GBP 28.99

* The return of the authoritative bestseller includes all new content relevant to the popularization of how About Face maintains its relevance to new Web technologies such as AJAX and mobile platforms......一起来看看 《About Face 3》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具