江西会昌建设局网站,杭州响应式网站,sem竞价推广托管代运营公司,树莓派搭建Wordpress系统一、简介 RabbitMQ是一个消息的代理器#xff0c;用于接收和发送消息#xff0c;你可以这样想#xff0c;他就是一个邮局#xff0c;当您把需要寄送的邮件投递到邮筒之时#xff0c;你可以确定的是邮递员先生肯定会把邮件发送到需要接收邮件的人的手里#xff0c;不…一、简介 RabbitMQ是一个消息的代理器用于接收和发送消息你可以这样想他就是一个邮局当您把需要寄送的邮件投递到邮筒之时你可以确定的是邮递员先生肯定会把邮件发送到需要接收邮件的人的手里不会送错的。在这个比喻中RabbitMQ就是一个邮箱也可以理解为邮局和邮递员他们负责把消息发送出去和用于接收信息。 RabbitMQ和邮局这两者之间的主要区别是它不会处理纸质邮件取而代之的是接收、存储和发送二进制数据块也就是我们通常所说的消息。 RabbitMQ和消息中通常会使用一些专业术语。 生产生产意味着就是发送。 发送消息的程序是一个生产者。下图代表一个消息的生产真 frameborder0 scrollingno styleborder-width: initial; border-style: none; width: 71px; height: 51px; 队列这里的队列是指一个名称但是名称所代表的队列实体寄存在RabbitMQ服务器端中。 虽然消息流过RabbitMQ和您的应用程序但它们只能存储在队列中。 队列只受主机的内存和磁盘的限制它本质上是一个大的消息缓冲区。 许多生产者可以发送消息到一个队列许多消费者可以尝试从一个队列接收数据。 下图代表一个队列 frameborder0 scrollingno styleborder-width: initial; border-style: none; width: 130px; height: 91px; 消费消费具有与接收相似的含义。 消费者是一个主要等待接收消息的程序。下图代表消息的消费者 frameborder0 scrollingno styleborder-width: initial; border-style: none; width: 71px; height: 51px;二、(使用 Net/C# 客户端) 在这篇教程中我们将用C#写两个程序;一个是生产者用于发送一个简单消息一个是消费者用于接收消息和把他们打印出来。我们将忽略一些.NET API的详细信息专注于更简单的开始。这是一个关于Hello World简单的小例子。 在下图中, P是我们的消息生产者C是我们消息的消费者。在中间的红色矩形框代表一个队列也就是消息的缓冲区RabbitMQ代表是消息的消费者。 frameborder0 scrollingno styleborder-width: initial; border-style: none; width: 392px; height: 59px; Net客户端类库 RabbitMQ支持多种协议本教程使用AMQP 0-9-1这是一个针对消息的开放的、通用的协议。RabbitMQ使用了多种语言开发了针对不同环境的客户端。下面我们将使用由RabbitMQ提供的Net客户端。 这个客户端类库支持.NET Core以及.NET Framework 4.5.1 以上的版本。本教程将使用.NET Core以便确保您安装在您的路径中。 你也可以使用 Net Framework 来完成本实例只是安装步骤有些不同而已。 RabbitMQ的客户端类库已经部署到了NuGet上并且您可以通过NuGet下载和使用。 本教程假定您正在使用Windows PowerShell。三、安装 首先让我们确认您已经有了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 现在我们已经有了两个项目安装完毕可以开始写一些代码了。四、发送消息 frameborder0 scrollingno styleborder-width: initial; border-style: none; width: 216px; height: 100px; 我们会调用我们的消息发布者发送者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()){...}}}} 当前connection连接是一个抽象的套接字连接为我们负责协议版本的协商和认证等。这里我们连接到本地机器上的消息代理--从此处的localhost关键字可以看出是本机。如果我们想连接到另一台机器上的一个消息代理我们只需在这里指定它的名称或IP地址。 接下来我们创建一个通道这个API的主要功能就是把获得信息保存起来 要发送我们必须声明一个队列然后我们把消息发送到这个队列里面 声明队列是一次性的只有当它不存在时才会被创建。消息内容是字节数组所以您可以编码任何您喜欢的内容。 当上面的代码完成运行时通道和连接将被释放。 发送不成功的解决办法 如果这是您第一次使用RabbitMQ发送消息但是你并没有看到“发送”的消息那么你可能会挠着头想知道错误在什么地方。也许消息代理开始没有足够的可用磁盘空间默认情况下它需要至少50 MB因此拒绝接受消息。必要时检查代理日志文件来确认和减少限制。配置文件的文档会告诉你如何设置disk_free_limit。五、接收消息 以上就是我们的消息生产者我们的消息的消费者是从RabbitMQ拉消息因此不能像我们的消息发布者那样发布单一消息我们需要保持我们的消费者程序持续运行并且监听消息如果有就获取并且打印出来。 frameborder0 scrollingno styleborder-width: initial; border-style: none; width: 216px; height: 100px; Receive.cs文件和Send.cs文件有一些很像的代码需要书写
using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text; 消息接收者的设置和消息的发布者一样我们要打开一个连接和一个通道并且声明一个从中获取消息的队列注意这个是和Send.cs文件中的发布者的队列相匹配的。
class Receive
{ public static void Main(){ 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);...}}}} 注意我们也在这里声明队列。因为我们可能在发行者之前启动消费者所以我们要确保队列在我们尝试从它中获取消息之前存在。 我们正要告诉服务器从队列中传递消息。因为它会异步推送我们的消息我们提供了一个回调。那是EventingBasicConsumer接收事件处理程序所做的。 六、把它放在一起 打开两个端点。 运行消费者 cd Receive dotnet run 然后运行生产者 cd Send dotnet Run 消费者将要打印消息生产者通过RabbitMQ发布的消息。消费者不能间断必须保持持续运行等待新消息的到来。当然也可以通过CtrlC 来停止消费者 好了终于写完了其实是我翻译的有翻译不对的地方请谅解。
原文地址http://www.cnblogs.com/PatrickLiu/p/6934745.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注