RabbitMQ入門學習系列(二),單生產者消費者

友情提示
我對個人文章負責,發現好多網上的文章 沒有實踐,都發出來的,讓人走不少彎路,若是你在個人文章中遇到沒法實現,或者沒法走通的問題。能夠直接在公衆號《愛碼農愛生活 》留言。一定會再次複查緣由。讓每一篇 文章都能順利實現。道理講明白 。原理講清楚。代碼必實現html

快速閱讀

​ 安裝好Rabbitmq-server,Erlang後,在vs中添加 Rabbitmq.client.創建兩個控制檯應用,實現單生產者單消費者的模式。git

友情提示

​ 我對個人文章負責,發現好多網上的文章 沒有實踐,都發出來的,讓人走不少彎路,若是你在個人文章中遇到沒法實現,或者沒法走通的。能夠直接公衆號:愛碼農愛生活 留言。一定會再次複查緣由。讓每一篇 文章的流程都能順利實現。github

1.安裝rabittmq

1562050261873

提示沒有安裝elang,要先下載安裝erlangc#

2.下載安裝erlang

會自動打開Erlang的下載連接 地址。個人是win7 64位系統,因此我選擇下面紅框裏的這個
1562050324880api

3.Erlang和RabbitMq的下載地址備份

今天終於下載下來了。 爲了不之後由於網絡問題下不下來,直接備份到百度雲數組

  1. rabbitmq-server-3.7.15.exe 下載地址

連接:https://pan.baidu.com/s/1aTEtVwNvSV58gzbmLncQlA 提取碼:3b1x服務器

  1. otp_win64_22.0 -erlang 下載地址
    連接:https://pan.baidu.com/s/1DF_KDKxTAHRGHZj6LYKdaA
    提取碼:9oy8

4.OTP是啥

​ Open Telecom Platform的縮寫,簡單理解就是一個框架 ,主要是把通用部分代碼和業務代碼進行分離。具體想多瞭解的能夠參考:https://www.cnblogs.com/john-d/archive/2010/04/16/1711276.html網絡

5.OTP22的安裝

安裝OTP22 ,直接打開,安裝到本身的程序目錄就行。 一直next到結束 。框架

1562051886887

6.安裝RabbitMq-server

直接打開,安裝到本身的程序目錄就行。 一直next到結束測試

1562051981333

1562051993287

7.官方的入門教程代碼下載

https://github.com/rabbitmq/rabbitmq-tutorials

8.RabbitMQ 入門代碼 Hello world

Rabbitmq是一個消息中間件,生產者生產消息放入隊列中,消費者從隊列中拿消息進行消費。

1562052742397

分別給兩個項目安裝RabbitMQ.client依賴包。 若是用這種方式安裝的話,產生的項目是netcore的

1562053463835

好了,vs打開啓動項目

不過遇到vs不能調試的錯誤了。,記得之前也遇到過這個問題,網上好多人說是把msvsmon.exe從別的地方複製一份就能夠了,可是個人不行,最後是經過添加刪除程序解決的。

感受這個錯誤,好像會出如今多個vs版本的時候會容易出現混亂。

1562055456395

可是發現新建的程序臺程序是可使用的。

這個先不用管了直接轉爲傳統的方式,vs打開項目,Nuget添加RabbitMq.client進行測試

從新在console控制檯裏操做吧。

9.vs中建立生產者

先安裝RabbitMQ.Client

1562056053175

生產者代碼:

注意:建立的連接若是是遠程服務器,要換成遠程服務器的IP地址,咱們是用localhost在本地測試

​ 建立完連接之後,再建立信道。大多數的api調用都是在信道中完成的。

​ 最後聲明一個隊列,把咱們要發送的消息發送出去。

​ 消息的內容在隊列中存的是了一個字節數組 ,咱們通常用Encoding.UTF8.GetBytes

static void Main(string[] args)
 {
     var factory = new ConnectionFactory() { HostName = "localhost" };
     using (var connection = factory.CreateConnection())
     {
         using (var channel = connection.CreateModel())
         {
             channel.QueueDeclare(queue: "hello",
                                  durable: false, exclusive: false, autoDelete: false, arguments: null);
             string message = "hello world";
             var body = Encoding.UTF8.GetBytes(message);
             channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);
             Console.WriteLine("[x] sent {0}", message);
         }
     }
     Console.WriteLine("");
     Console.ReadLine();
 }

10.消費者

消費者從消息隊列中監聽消息 ,要保持持續鏈接

代碼:

​ 注意:

1. Console.ReadLine();的位置,要放在channel代碼塊中。
  1. 流程仍是創建鏈接-》建立信道-》定義隊列=》
  2. 由於可能先啓動消費者,因此隊列也須要進行聲明 一下。
  3. 在使用隊列時,要保證隊列必須存在。
static void Main(string[] args)
{
    var factory = new ConnectionFactory() { HostName = "localhost" };
    using (var connection = factory.CreateConnection())
    {
        using (var channel = connection.CreateModel())
        {
            channel.QueueDeclare(queue: "hello",
                                 durable: false, exclusive: false, autoDelete: false, arguments: null);

            //如下是區別生產者的
            var consumer = new EventingBasicConsumer(channel);
            consumer.Received += (sender, e) =>
            {
                var body = e.Body;
                var message = Encoding.UTF8.GetString(body);
                Console.WriteLine("Received {0}", message);
            };
            channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer);
            Console.WriteLine("");
            Console.ReadLine();
        }

    }

}

運行效果

1562058872964

代碼下載:
連接:https://pan.baidu.com/s/1ETUFWm2ilTY4eONkSqaz-A 提取碼:bims

相關文章
相關標籤/搜索