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); } } } }