RabbitMq學習一入門篇(hello world)

  1. 簡介  

    • RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java,也是衆多消息隊列中表現不俗的一員,做用就是提升系統的併發性,將一些不須要及時響應客戶端且佔用較多資源的操做,放入隊列,再由另一個線程,去異步處理這些隊列,可極大的提升系統的併發能力。html

  2. 安裝     

    • 安裝RabbitMq須要erlang,點擊下載
    • 去官網下載Rabbit安裝包,點擊下載  
    • 安裝完成以後,rabbitmq還提供了強大的web版本管理界面,啓用方式-》打開CMD命令,cd到安裝目錄sbin下,輸入命令rabbitmq-plugins enable rabbitmq_management; 
  3. 「hello world」(.NET中Rabbimq使用)

     1.實例參考官網教程 

2.使用官網提供的c#操做類庫RabbitMQ.Client web

咱們先分別建立兩個控制檯程序 一個用來發送消息到rabbitmq 消息代理做爲何生產者;另一個從中讀取進行消費做爲消費者。c#

如:p表明生成者,c表明消費者,中間的部分表明消息隊列   服務器

生成者的代碼以下:併發

複製代碼
 public static void RunSend()
        {
            ConnectionFactory connectionFactory = new ConnectionFactory()
            {
                HostName = "192.168.35.129",
                Port = 5672,
                Password = "123",
                UserName = "mquser"
            };

            //創建鏈接rabbitmq 消息代理服務器。
            using (IConnection conn = connectionFactory.CreateConnection())
            {
                //建立Channel對象
                using (IModel channel = conn.CreateModel())
                {
                    //聲明隊列  
                    channel.QueueDeclare("hello", durable: false,
                        exclusive: false,
                        autoDelete: false,
                        arguments: null);
                    //消息 ,此處是簡單的字符串,你也能夠定義複雜的消息體
                    string msg = "Hello World";

                    var body = Encoding.UTF8.GetBytes(msg);

                    //把消息放到隊列中
                    channel.BasicPublish(exchange:"",
                        routingKey:"hello",
                        basicProperties:null,
                        body:body);

                    Console.WriteLine("send {0}",msg);

                }
            }
        }
複製代碼

消費者的代碼以下:異步

複製代碼
public static void RunReceive()
        {

            ConnectionFactory connectionFactory = new ConnectionFactory()
            {
                HostName = "192.168.35.129",
                Port = 5672,
                Password = "123",
                UserName = "mquser"
            };
            using (IConnection conn = connectionFactory.CreateConnection())
            {

                using (IModel channel = conn.CreateModel())
                {
                    //注意:在 send.CS 中也聲明瞭隊列Hello,這裏爲何要再次聲明
                    //第一:QueueDeclare 實現了冪等性,建立的時候若是已經存在,就不會再次建立。
                    //第二:由於 兩邊都進行建立,不用考慮 生產者 和消費者 啓動的順序了。
                    channel.QueueDeclare("hello", durable: false,
                        exclusive: false,
                        autoDelete: false,
                        arguments: null);

                    //建立事件驅動的消費者類型;建議使用此種方式,不要使用while(true)
                    //理由嗎 哈哈 看看王清培的博客吧。不穩定不優雅。。。 
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (sender, e) =>
                    {
                        var body = e.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] Received {0}", message);
                    };

                    channel.BasicConsume(queue: "hello",
                                noAck: true,
                                consumer: consumer);

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
            }
        }
複製代碼

輸出spa

 

  好了rabbitmq入門篇講完了,是否是很簡單。線程

相關文章
相關標籤/搜索