一、Rabbit MQ 简介
RabbitMQ是一个接收、转发消息的消息中间件。你可以把它想象成一个邮局:当你把邮件放假邮箱后时,你能够确保邮递员最终会将你的邮件送到收件人手里。在这个比喻中,RabbitMQ是一个邮箱、一个邮局、一个邮递员。RabbitMQ与邮局最大的不同是它接收、存储和转发二进制数据块--消息,而不是处理纸质信件。
RabbitMQ与其他消息中间件通常使用的一些名词:
- Producing:指发送,一个发送消息的程序叫做Producer
- Queue:在RabbitMQ中,类似与邮局中的邮箱,用于存放二进制数据块。虽然消息经过RabbitMQ和你的应用程序,但是它们只能存在queue里面。queue本质上是一个大的消息缓冲区,只受主机的内存与硬盘的限制。多个Producer可以发送消息至一个queue,多个Consumer可以从一个queue中接收消息。如下图所示:
- Consuming:至接收消息,一个等待接收消息的程序叫Consumer
Producer、COnsumer、Broker没有必要安装在同一台主机上;实际上,在大多应用程序中都是分开安装。一个应用程序可以同时是Producer和Consumer。
RabbitMQ使用了AMQP网络通信协议。可以点击深入了解RabbitMQ的工作原理。
二、Rabbit MQ 安装
安装RabbitMQ服务端(当前最新v 3.8.5下载地址 )注意:安装前先安装Erlang(建议opt 23.0)
如遇上图错误,是因为ERLANG_HOME路径配置有误,修改环境变量ERLANG_HOME=erlang安装目录中Bin的上一级:
这个时候运行服务端,如果提示则百度安装一下即可。
注意:MSVCR120.dll要下载与系统对应的版本,不然会很难受。
三、RabbitMQ示例--"HELLO WORLD"
下面我们以发送、接收"Hello World"的示例,先简单了解RabbitMQ的开发(以C#代码为示例):
首先创建两个控制台应用程序:RabbitMQ.Producer(消息生产者)、RabbitMQ.Consumer(消息消费者)
添加nuget引用-->>RabbitMQ.Client
RabbitMQ.Producer.Program.cs
using RabbitMQ.Client; using System; using System.Text; using System.Timers; namespace RabbitMQ.Producer { class Program { static void Main(string[] args) { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); string message = "Hello World!"; var body = Encoding.UTF8.GetBytes(message); Timer timer = new Timer(); timer.Elapsed += new ElapsedEventHandler((object sender, ElapsedEventArgs e) => { channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); Console.WriteLine($"[{DateTime.Now}][Producer Test] Sent {message}"); }); timer.Interval = 1000; timer.Enabled = true; timer.Start(); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } } } }