本系列文章均来自官网原文,属于个人翻译,如有雷同,权当个人归档,忽喷.
.NET/C# RabbitMQ 客户端下载地址:https://github.com/rabbitmq/rabbitmq-dotnet-client
关于RabbitMQ在windows 平台的安装和管理配置请参考:http://www.cnblogs.com/grayguo/p/5300776.html
确保安装成功:
这部分会写两个程序,一个消息生产者发送一个消息;一个消费者接受消息然后输出到控制台,在这个过程中我会忽略一些.Net的细节,把注意力放在这个简单的"hello word" 消息程序上。
在下图中"P" 是我们的生产者,"C" 是我们的消费者,两者之间的中间这是我们的消息队列--一个隐藏在消费者后面的消息缓冲区.
创建一个Send.cs 来写发送程序,发送方会连接RabbitMQ 服务器,发送消息,然后退出.
class Send { public static void Main() { var factory = new ConnectionFactory() { HostName = "192.168.15.128" }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { ... } } } }
首先需要创建一个连接工厂去连接我们的RabbitMQ服务器,这里我们使用RabbitMQ-dotnet-client 提供的类库来进行回话的创建.
这里的这里的connection 连接已经为我们把socket 连接, 版本协议和认证会话,都已经为我们做了.这里我连接的服务器是"192.168.15.128"(由于我把RabbitMQ的测试环境搭栽了一台虚拟机上,如果是本机可写成"localhost"),直接指定服务器IP即可.
然后我们在这个连接上创建了一次回话(channel),我们所做的大部分Api操作都要基于会话进行。
为了发送消息,我们需要创建一个队列用来存储消息,然后可以把我们的消息发送到该队列上,创建队列代码:
channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false,arguments: null); //queue:队名名 //durable:是否持久化 //exclusive:是否排他 //autoDelete:自动删除
注:创建队列的API是具有幂等性的--即只有当所指定的队列不存在时才会去创建.
然后发送消息:
string message = "Hello World!"; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "",routingKey: "hello", basicProperties: null, body: body);
发送的消息必须是字节数组,我们可以自己指定所需的编码
完整代码如下:
public class Send { public static void Main() { var factory = new ConnectionFactory() { HostName = "192.168.15.128" }; 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); channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); Console.WriteLine(" [x] Sent {0}", message); } Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } }