1. 程式人生 > >我的RabbitMQ學習之1(介紹)

我的RabbitMQ學習之1(介紹)

代理 tutorials 轉發數據 一個 mode 圖片 ssa 方式 初始化

官方網址:http://www.rabbitmq.com

我翻譯官網的文檔,僅供自己學習用...................

RabbitMQ 是什麽,它就是一個消息隊列,用在哪裏,用在不需要及時處理的地方,比如發送驗證碼,發送郵件等等,多用戶訂閱,最大化發揮系統性能,

RabbitMQ是一個消息代理:它接受和轉發消息。你可以把它想象成一個郵局:當你把郵件放在郵箱裏時,你可以確定郵差先生最終會把郵件發送給你的收件人。在這個比喻中,RabbitMQ是郵政信箱,郵局和郵遞員。

RabbitMQ與郵局的主要區別是它不處理紙張,而是接受,存儲和轉發數據消息的二進制數據塊

  • 技術分享圖片

  • 隊列是RabbitMQ內部的郵箱名稱。盡管消息流經RabbitMQ和您的應用程序,但它們只能存儲在隊列中隊列僅由主機的存儲器&磁盤限制約束,它本質上是一個大的消息緩沖器。許多生產者可以發送消息到一個隊列,許多消費者可以嘗試從一個隊列接收數據這就是我們代表隊列的方式:

    技術分享圖片

  • 消費與接受有類似的意義。一個消費者是一個程序,主要是等待接收信息:

    技術分享圖片

請註意,生產者,消費者和經紀人不必駐留在同一主機上; 事實上在大多數應用程序中,他們沒有

“P”是我們的生產者,“C”是我們的消費者。中間的盒子是一個隊列 - 一個RabbitMQ代表消費者的消息緩沖區。

簡單的 生產者 -> 消費者 模式 使用

1.消費者

           //初始化一個連接 生產者 -> (發布者)
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            using (var channel = connection.CreateModel())
            {
                
//定義一個隊列 channel.QueueDeclare(queue: "order", durable: true, exclusive: false, autoDelete: false, arguments: null); var body = Encoding.UTF8.GetBytes(message); IBasicProperties properties = channel.CreateBasicProperties(); //生產一條信息 channel.BasicPublish(exchange: "", routingKey: "order", basicProperties: properties, body: body); Console.WriteLine("開始發送:--{0}", message); }

2.簡單的 消費者 模式

            //初始化一個連接 生產者 -> (消費者)
            var factory = new ConnectionFactory()
            { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            using (var channel = connection.CreateModel())
            {
                //對應的隊列
                channel.QueueDeclare(queue: "order",
                                     durable: true,
                                     exclusive: false,
                                     autoDelete: false,
                                     arguments: null);

                var consumer = new EventingBasicConsumer(channel);

                //接受消息
                consumer.Received += (model, ea) =>
                {
                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine("接受到信息: {0} mode:{1}", message, model);
                };
                channel.BasicConsume("order", true, consumer);
                Console.ReadLine();
            }

我的RabbitMQ學習之1(介紹)