RabbitMQ简单实践
###一、RabbitMQ的简介和安装
1.1 RabbitMQ的安装
到官网下载最新的安装包,和Erlang的安装包,我的安装包如下图先安装Erlang,再安装RabbitMQ,一直点击下一步就可以了。安装完成之后,我们需要启用管理功能,找到安装位置,进入到sbin文件夹,执行下列命令rabbitmq-plugins enable rabbitmq_management
,如图:启用成功后,打开http://localhost:15672即可进入管理页面,用户名和密码均为guest至此安装完成,rabbitmq已经可以正常使用。
1.2 RabbitMQ简介
RabbitMQ是实现了AMQP协议的开源消息中间件。在我们日常开发中,可以帮助我们实现以下的常用功能:异步处理:批量数据异步处理应用解耦:串行任务并行化流量削峰:高负载任务负载均衡广播:基于发布/订阅模型实现一对多通信
###二、简单工作队列下面我们开始从代码聊起,写一个基于.netcore的demo来了解简单队列####2.1、简单队列 Simple-queue模型简单队列的模型如下图:P:为生产者(Producer),为消息的发送方C:为消费者(Consumer),消费队列中的消息整个流程为,生产者生产消息,发布到队列(Queue)中;消费者监听这个队列,消费里面的消息;下面我们开始使用编写代码来完成上述过程,代码框架基于netcore3.1
,并引用RabbitMQ.Client
5.1.2包;####2.2 与RabbitMQ建立连接
public static IConnection GetConnection() { ConnectionFactory factory = new ConnectionFactory(); factory.UserName = "guest"; factory.Password = "guest"; factory.HostName = "127.0.0.1"; factory.Port = 5672; return factory.CreateConnection(); }
指定用户名、密码、地址端口等,使用CreateConnection
方法即可创建连接;####2.3、发送消息到队列
public static void PublishMessage() { try { var conn = GetConnection(); var channel = conn.CreateModel(); channel.QueueDeclare(QUEUE_NAME, false, false, false, null); string msg = "hello simple queue!"; var body = Encoding.UTF8.GetBytes(msg); channel.BasicPublish("", QUEUE_NAME, null, body); channel.Close(); conn.Close(); } catch (Exception ex) { throw ex; } }
我们在队列里,收到了刚才发送的消息:
####2.4、监听队列接收消息收到消息后,我们需要消费者去获取取消息,并消费,代码如下:
static void SimpleConsumer() { //创建连接 IConnection connection = MQUtils.GetConnection(); //创建通道 var channel = connection.CreateModel(); //事件基本消费者 EventingBasicConsumer consumer = new EventingBasicConsumer(channel); //接收到消息事件 consumer.Received += (ch, ea) => { var message = Encoding.UTF8.GetString(ea.Body); Console.WriteLine($"Simple Consumer 收到消息: {message},时间:{DateTime.Now}"); }; //启动消费者 设置为自动应答消息 channel.BasicConsume("queue_test", true, consumer); Console.WriteLine("Simple Consumer 消费者已启动"); Console.ReadKey(); channel.Dispose(); connection.Close(); }
运行程序,我们可以看到已经读取到了队列中的消息:同时,队列中的消息已经被消费:至此我们的简单队列,已经写完并演示完毕###三、简单队列小结简单队列是最简单的工作模型,消费者和生产者通过RabbitMQ的队列解耦,大家各司其职,是学习rabbitmq入门的第一步。参考文章:1、Hello RabbitMQ 地址:https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html2、https://www.cnblogs.com/stulzq/p/7551819.html