RabbitMQ初探 001——初识RabbitMQ 01

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yysyangyangyangshan/article/details/86541777

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 Comman Prompt,运行。依次运行如下命令:
rabbitmq-service install
rabbitmq-service enable
rabbitmq-service start

执行结果分别如下所示:

然后,执行
rabbitmq-plugins enable rabbitmq_management即可成功安装,

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

本地管理页面.png
这样,环境准备OK了。

3、做一个Demo
消息队列的模型是这样的:

3.1、消息的发送和接收
用.net core 来实现发送和接收端的简单逻辑。在实现前先要下载一个dll,RabbitMQ的.net core驱动。
下载地址:https://download.csdn.net/download/yysyangyangyangshan/10925942

.net core实现接收端的逻辑,
新建一个控制台程序:RabbitMQReceiver,整体结构如下,
 

主要代码:

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,整体结构如下,

主要代码:

 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",一定是接收方的队列名。
先执行接收端,再执行发送端,如下图

发送端,

接收端

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

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

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

猜你喜欢

转载自blog.csdn.net/yysyangyangyangshan/article/details/86541777