下面来展示简单的RabbitMQ的使用
我们用我们第五节中创建的控制台项目
作为生产者客户端
这个程序作为Producer生产者,用来发送数据:
using RabbitMQ.Client;
static void Main(string[] args)
{
var factory = new ConnectionFactory();
factory.HostName = "localhost";//RabbitMQ服务在本地运行
factory.UserName = "guest";//用户名
factory.Password = "guest";//密码
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);//创建一个名称为hello的消息队列
string message = "Hello World"; //传递的消息内容
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish("", "hello", null, body); //开始传递
Console.WriteLine("已发送: {0}", message);
Console.ReadLine();
}
}
}Code language: JavaScript (javascript)
现在当我们运行项目
此时,名为hello的消息队列中,发送了一条消息。这条消息存储到了RabbitMQ的服务器上。使用rabbitmqctl 的list_queues可以查看所有的消息队列,以及里面的消息个数。可以看到,目前RabbitMQ上只有一个消息队列,里面只有一条消息:
也可以在web管理界面查看此queue的相关信息:
看另外一个例子
//第一步:创建连接connection
using (var connection = factory.CreateConnection())
{
//第二步:创建通道channel
using (var channel = connection.CreateModel())
{
//第三步:声明交换机exchange
channel.ExchangeDeclare(exchange: "myexchange",
type: ExchangeType.Direct,
durable: true,
autoDelete: false,
arguments: null);
//第四步:声明队列queue
channel.QueueDeclare(queue: "myqueue",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
Console.WriteLine("生产者准备就绪....");
//第五步:绑定队列到交换机
channel.QueueBind(queue: "myqueue", exchange: "myexchange", routingKey: "mykey");
string message = "";
//第六步:发送消息
//在控制台输入消息,按enter键发送消息
while (!message.Equals("quit", StringComparison.CurrentCultureIgnoreCase))
{
message = Console.ReadLine();
var body = Encoding.UTF8.GetBytes(message);
//基本发布
channel.BasicPublish(exchange: "myexchange",
routingKey: "mykey",
basicProperties: null,
body: body);
Console.WriteLine($"消息【{message}】已发送到队列");
}
}
}
Console.ReadKey();Code language: JavaScript (javascript)
Previous: 创建项目和引入了解概念
Next: 第一个例子-消费者接收消息