C# · 12月 20, 2021

[c#]RabbitMQ的简单使用

摘要<p style="margin-left: 30px;">Message Queue消息队列,简称MQ,是一种应用程序对应用程序的通信方法,应用程序通过读写出入队列的消息来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此通信。

<p style="margin-left: 30px;">MQ是消费-生产者模型的一个典型代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。

安装<p style="margin-left: 30px;">官网地址:。

<p style="margin-left: 30px;">下载后,需要安装RabbitMQ服务。如果没有Erlang环境会弹出下面的提示:

<p style="margin-left: 30px;">

<p style="margin-left: 30px;">下载Erlang环境并安装

<p style="margin-left: 30px;">地址:

<p style="margin-left: 30px;">然后安装RabbitMQ,安装成功后会在服务中看到该服务。

<p style="margin-left: 30px;">

一个例子<p style="margin-left: 30px;">新建一个控制台应用程序,并使用Nuget引入RabbitMQ

<p style="margin-left: 30px;">

<p style="margin-left: 30px;"> 代码如下:

<p style="margin-left: 30px;">当type等于1时,客户端为生产者,2时为消费者

Main( type = (type=== = factory.Port = (IConnection conn = (IModel channel = channel.QueueDeclare(,,, ( message = .Format([] buffer === , + ConnectionFactory factory = = factory.Port = (IConnection conn = (IModel channel = channel.QueueDeclare(, </span><span style=”color: #008000;”&gt;//</span><span style=”color: #008000;”&gt;输入1,那如果接收<a href=”https://www.jb51.cc/tag/yige/” target=”_blank” class=”keywords”>一个</a>消息,但是没有应答,则客户端不会收到下<a href=”https://www.jb51.cc/tag/yige/” target=”_blank” class=”keywords”>一个</a>消息</span> channel.BasicQos(<span style=”color: #800080;”&gt;0</span>,<span style=”color: #800080;”&gt;1</span>,<span style=”color: #0000ff;”&gt;false</span><span style=”color: #000000;”&gt;); Console.WriteLine(</span><span style=”color: #800000;”&gt;”</span><span style=”color: #800000;”&gt;Listening…</span><span style=”color: #800000;”&gt;”</span><span style=”color: #000000;”&gt;); </span><span style=”color: #008000;”&gt;//</span><span style=”color: #008000;”&gt;在队列上定义<a href=”https://www.jb51.cc/tag/yige/” target=”_blank” class=”keywords”>一个</a>消费者</span> QueueingBasicConsumer consumer = <span style=”color: #0000ff;”&gt;new</span><span style=”color: #000000;”&gt; QueueingBasicConsumer(channel); </span><span style=”color: #008000;”&gt;//</span><span style=”color: #008000;”&gt;消费队列,并设置应答模式为程序主动应答</span> channel.BasicConsume(<span style=”color: #800000;”&gt;”</span><span style=”color: #800000;”&gt;MyRabbitMQ</span><span style=”color: #800000;”&gt;”</span>,<span style=”color: #0000ff;”&gt;false</span><span style=”color: #000000;”&gt;,consumer); </span><span style=”color: #0000ff;”&gt;while</span> (<span style=”color: #0000ff;”&gt;true</span><span style=”color: #000000;”&gt;) { </span><span style=”color: #008000;”&gt;//</span><span style=”color: #008000;”&gt;阻塞<a href=”https://www.jb51.cc/tag/hanshu/” target=”_blank” class=”keywords”>函数</a>,<a href=”https://www.jb51.cc/tag/huoqu/” target=”_blank” class=”keywords”>获取</a>队列中的消息</span> BasicDeliverEventArgs ea =<span style=”color: #000000;”&gt; (BasicDeliverEventArgs)consumer.Queue.Dequeue(); </span><span style=”color: #0000ff;”&gt;byte</span>[] bytes =<span style=”color: #000000;”&gt; ea.Body; </span><span style=”color: #0000ff;”&gt;string</span> str =<span style=”color: #000000;”&gt; Encoding.UTF8.GetString(bytes); Console.WriteLine(</span><span style=”color: #800000;”&gt;”</span><span style=”color: #800000;”&gt;队列消息:</span><span style=”color: #800000;”&gt;”</span> +<span style=”color: #000000;”&gt; str.ToString()); </span><span style=”color: #008000;”&gt;//</span><span style=”color: #008000;”&gt;<a href=”https://www.jb51.cc/tag/huifu/” target=”_blank” class=”keywords”>回复</a>确认</span> channel.BasicAck(ea.DeliveryTag,<span style=”color: #0000ff;”&gt;false</span><span style=”color: #000000;”&gt;); } } } } }}</span></pre><p style="margin-left: 30px;">测试

<p style="margin-left: 30px;">启动生产者

<p style="margin-left: 30px;">

<p style="margin-left: 30px;">启动消费者

<p style="margin-left: 30px;">

<p style="margin-left: 30px;">使用生产者入队,1,2,3,4,5,6,7,8

<p style="margin-left: 30px;">

<p style="margin-left: 30px;">消费者

<p style="margin-left: 30px;">

<p style="margin-left: 30px;"> 参考文章

<p style="margin-left: 30px;">