public static void SendMessage()
{
var factory = new ConnectionFactory();
factory.HostName = "192.168.1.117";
factory.UserName = "witbank";
factory.Password = "123456";
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
const string EXCHANGE_NAME = "logs";
const string ROUTING_KEY = "";
channel.ExchangeDeclare(EXCHANGE_NAME, "fanout");//廣播
while (true)
{
string message = "請輸入要發送的信息";
Console.WriteLine(message);
message = Console.ReadLine();
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(EXCHANGE_NAME, ROUTING_KEY, null, body);//不需要指定routing key,設置了fanout,指了也沒有用.
Console.WriteLine(" [x] Sent {0}", message);
}
}
}
}
public static void ReceiveMessage()
{
var factory = new ConnectionFactory();
factory.HostName = "192.168.1.117";
factory.UserName = "witbank";
factory.Password = "123456";
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
const string EXCHANGE_NAME = "logs";
const string ROUTING_KEY = "";
channel.ExchangeDeclare(EXCHANGE_NAME, "fanout");//廣播
QueueDeclareOk queueOk = channel.QueueDeclare();//每當Consumer連接時,我們需要一個新的,空的queue。因為我們不對老的log感興趣。幸運的是,如果在聲明queue時不指定名字,那么RabbitMQ會隨機為我們選擇這個名字。
////現在我們已經創建了fanout類型的exchange和沒有名字的queue(實際上是RabbitMQ幫我們取了名字)。
////那exchange怎么樣知道它的Message發送到哪個queue呢?答案就是通過bindings:綁定。
string queueName = queueOk.QueueName;//得到RabbitMQ幫我們取了名字
channel.QueueBind(queueName, EXCHANGE_NAME, ROUTING_KEY);//不需要指定routing key,設置了fanout,指了也沒有用.
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume(queueName, true, consumer);
Console.WriteLine(" [*] Waiting for messages." + "To exit press CTRL+C");
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//掛起的操作
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
}
}
}
}