先决条件
本教程假定RabbitMQ已经安装,并运行在localhost标准端口(5672)。如果你使用不同的主机、端口或证书,则需要调整连接设置。
从哪里获得帮助
如果您在阅读本教程时遇到困难,可以通过邮件列表。
RabbitMQ是一个消息代理:它接受并转发消息。您可以把它想象成一个邮局:当您将需要寄出的邮件投递到邮箱,您可以确定的是邮差先生最终会将邮件送给您的收件人。在这个比喻中,RabbitMQ就是一个邮箱,也可以理解成邮局和邮递员。
RabbitMQ和邮局的主要区别在于它不处理纸张,而是接收、存储和转发二进制数据块 - 消息。
RabbitMQ和消息传递通常使用一些术语。
生产的意思无非就是发送。发送消息的程序就是一个生产者:
队列就是RabbitMQ内部“邮箱”的名称。虽然消息流经RabbitMQ和您的应用程序,但它们只能存储在队列中。队列只受主机的内存和磁盘的限制,它本质上就是一个很大的消息缓冲区。多个生产者可以发送消息到一个队列,并且多个消费者可以尝试从一个队列接收数据。这就是我们代表队列的方式:
消费与接收有相似的含义。主要等待接收消息的程序就是一个消费者:
注意:生产者、消费者和中间件不是必须部署在同一主机上,实际上在大多数应用程序中它们不是。
2."Hello World" 2.1.使用.NET / C#客户端在教程的这一部分,我们将用C#编写两个程序:一个发送单条消息的生产者,以及接收消息并将其打印出来的消费者。我们将忽略.NET客户端API中的一些细节,专注于更简单的开始。这是一个消息传递的“Hello World”。
在下图中,“P”是我们的生产者,“C”是我们的消费者。中间的盒子是队列 - RabbitMQ代表消费者保存的消息缓冲区。
.NET客户端库
RabbitMQ支持多种协议,本教程使用AMQP 0-9-1,它是一种开放的、通用的消息传递协议。RabbitMQ提供了一些针对不同语言环境的客户端,我们将使用RabbitMQ提供的.NET客户端。
客户端支持.NET Core以及.NET Framework 4.5.1+。本教程将使用.NET Core,因此您需要确保客户端已安装并且路径添加到PATH系统变量。
您也可以使用.NET Framework来完成本教程,但设置步骤会有所不同。
RabbitMQ .NET客户端5.0及更高版本通过nuget发布。
本教程假定您在Windows上使用PowerShell。在MacOS和Linux上,几乎所有shell也都可以正常工作。
2.2.安装首先让我们验证您在PATH系统变量是否有.NET Core工具链:
dotnet --help应该产生帮助信息。
现在,让我们生成两个项目,一个用于发布者,另一个用于消费者:
dotnet new console --name Send mv Send/Program.cs Send/Send.cs dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs这将创建两个名为Send和Receive的新目录。
然后,我们添加客户端依赖项。
cd Send dotnet add package RabbitMQ.Client dotnet restore cd ../Receive dotnet add package RabbitMQ.Client dotnet restore我们已经建立了.NET项目,现在我们可以编写一些代码。
2.3.发送我们将调用我们的消息发布者(发送者)Send.cs和我们的消息消费者(接收者)Receive.cs。发布者将连接到RabbitMQ,发送一条消息,然后退出。
在Send.cs中,我们需要使用一些命名空间:
using System; using RabbitMQ.Client; using System.Text;设置类:
class Send { public static void Main() { ... } }然后,我们可以创建一个连接,连接到服务器:
class Send { public static void Main() { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { ... } } } }该连接抽象了套接字连接,并为我们处理协议版本的协商和身份验证等。在这里,我们连接的是本地机器上的代理, 因此是localhost。如果我们想连接到其他机器上的代理,我们只需在此指定其名称或IP地址。
接下来,我们创建一个通道,该API的主要功能是把获得信息保存起来。