1.安装完 RabbitMQ 之后,我们可以点击 http://localhost:15672/#/ 默认账号:guest 密码: guest
在这上面我们可以查看执行情况、管理连接、管理队列、管理通道、管理Exchange(交换所)
2.交换类型
交换类型分为:direct、topic、headers 、 fanout 四种,这一章我们先学习 fanout ,
fanout:大致如下图(类似广播),P是生产者,X是Exchange ,P把消息发给 X 然后X会下发给所有与它关联的队列排队执行
2.例子
下面我用一个订阅者跟发布者来给大家做一个例子
首先我们先创建一个发布者:
/// <summary>
/// 发布者
/// </summary>
public static void RabbitPublishedHost()
{
ConnectionFactory factory = new ConnectionFactory()
{
HostName = "localhost",
Port = 5672
};
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "message",
type: "fanout");//注意这里填写的交换类型
while (true)
{
Console.WriteLine("请输入要发布的消息 [enter] 发送:");
var message = Console.ReadLine();
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "message",
routingKey: "",
basicProperties: null,
body: body);
Console.WriteLine(string.Format("{0} 发布了消息:{1}", DateTime.Now.ToShortDateString(), message));
}
}
}
} //控制台运行
static void Main(string[] args)
{
RabbitMQTest.RabbitPublishedHost();
}
这里是订阅者代码:
/// <summary>
/// 订阅者
/// </summary>
public static void RabbitSubscribeClient()
{
ConnectionFactory factory = new ConnectionFactory()
{
HostName="localhost",
Port =5672
};
try
{
using (IConnection connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "message", type: "fanout"); var queueName = channel.QueueDeclare().QueueName; channel.QueueBind(queue: queueName,
exchange: "message",
routingKey: ""); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body); Console.WriteLine(string.Format("收到推送的消息:{0}", message));
}; channel.BasicConsume(queue: queueName,
autoAck: true,
consumer: consumer);
Console.ReadLine();
}
}
}catch(Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
//控制台运行 static void Main(string[] args)
{
RabbitMQTest.RabbitSubscribeClient();
}
当我们同时运行多个项目(可到bin 目录下点击运行多个消费者窗口)结果如图: