整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript數據結構-隊列的實現

          JavaScript數據結構-隊列的實現

          列與堆棧類似,只是插入點與移除點不同。

          我們在隊列的一端添加,從另一端移除。

          這一次,我們稱之為先進先出(FIFO)。

          就像你能想到的任何隊列一樣,例如在餐廳、迪廳或者當你在等待進入音樂廳時。

          這是在JavaScript中使用私有類字段,使用數組作為內部存儲的隊列的實現。

          class Queue {
            #items=[]
            enqueue=(item)=> this.#items.splice(0, 0, item)
            dequeue=()=> this.#items.pop()
            isempty=()=> this.#items.length===0
            empty=()=> (this.#items.length=0)
            size=()=> this.#items.length
          }

          下面是如何使用它:首先從類中初始化一個對象,然后調用它的方法。

          • enqueue() 來添加項目
          • dequeue()從隊列中取出一個項目。

          例如:

          essage Queue消息隊列,簡稱MQ

          C#項目要利用RabbitMQ來獲取實時數據的話,需要

          ①安裝RabbitMQ服務、

          ②下載Erlang環境并安裝、

          ③引入RabbitMQ.client.dll動態庫

          準備工作

          首先,我們訪問官網【https://www.rabbitmq.com/】,點擊Get Started。

          然后,網站會自動跳轉到當前首頁Get Started的錨點位置,如下圖:

          Get Started錨點:

          然后我們點擊DownLoad+Installation,進入到下載界面。

          在下載頁面中,我們找到安裝指南,然后在點擊官網推薦的Windows系統的安裝包,如下圖:

          現在,我們進入了Windows安裝指南界面了。

          首先,我們看一下預覽信息,如下圖:

          在預覽里,我們得知,安裝RabbitMQ有兩種方法,一種是使用Chocolatey安裝,一種是使用官方安裝包安裝。

          Chocolatey是什么呢?隨手百度一下,原來他是一個軟件包管理工具,也就是說,Chocolatey是類似于Nuget的一種工具。

          由于Chocolatey的使用,我不是很熟悉,所以,這里選擇使用官方安裝包安裝。

          點擊【Using the official installer】,我們進入了【Using the official installer】對應的錨點,如下圖。


          在【Using the official installer】段落里找到有推薦標志的安裝包,然后下載。

          下載完成后,我們可以得到這樣一個安裝包,如下圖:

          除了下載安裝包,我們還會發現,在【Using the official installer】段落里,有提醒我們,RabbitMQ是有依賴的,依賴一個Erlang語言的框架(類似于C#語言的NetFramework)。

          我們可以發現,在依賴的段落里,官網非常坑的給出了三個鏈接網址,如下:

          supported version of Erlang:https://www.rabbitmq.com/which-erlang.html

          Windows installer:https://www.erlang.org/downloads

          Erlang Solutions:https://www.erlang-solutions.com/resources/download.html

          因為,我們是無法通過文字描述來判斷,哪一個是真的依賴框架的下載地址,所以只好每個都點擊進去看看。。。

          打開網址后發現,在后兩個網址中都可以找到框架下載地址,但第二個地址明顯更友好一點,所以我們在第二個網址內下載Erlang的框架。

          下載完成得到如下圖文件:

          PS:這里下載的是OTP的22.1的版本,我的理解是Erlang等于C#語言,而OTP等于NetFramework。

          安裝Erlang\OTP

          首先,我們運行otp_win64_22.1.exe,安裝依賴框架Erlang\OTP。

          安裝完成后,設置環境變量如下:

          然后運行CMD,輸入erl,測試安裝是否成功,如下圖:

          安裝成功。

          安裝rabbitmq-server

          安裝完依賴后,我們接著安裝rabbitmq-server-3.8.0.exe。

          【rabbitmq-server-3.8.0.exe】?從這個文件名上,我們發現了一個問題,那就是,我們即將安裝的RabbitMQ,是一個服務端啊。

          什么?服務端?難道還有客戶端???

          其實這也很好理解,想一下最開始我舉的那個例子,消息隊列是需要一個監聽端口的服務端的,然后客戶端向這個服務端發送請求。

          這樣是不是就很好的理解RabbitMQ了呢:)

          ----------------------------------------------------------------------------------------------------

          安裝完RabbitMQ服務端后,我們還是啟動CMD,用命令行來查看下安裝狀態。

          首先輸入下面的命令,將路徑定位到RabbitMQ的路徑下:

          【CD /D C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.0\sbin】

          然后輸入rabbitmqctl status查看狀態。

          啟動管理工具的命令行:rabbitmq-plugins enable rabbitmq_management。

          啟動成功后,在瀏覽器輸入地址http://127.0.0.1:15672/,進入管理頁面,賬戶密碼都是guest。

          C#里使用RabbitMQ開源類庫非常簡單,可以去官網下載一個.NET版本的RabbitMQ客戶端類庫,也可以直接在Nuget上搜索RabbitMQ,然后安裝,如下圖:


          到此,RabbitMQ服務端的環境配置好了,正常情況,這些配置應該在服務器進行,但我為了測試方便,就把服務端也安裝在本機了,因此我下面調用RabbitMQ時,連接的主機IP都是localhost。

          實例代碼:

          using RabbitMQ.Client;
          using RabbitMQ.Client.Events;
          using System;
          using System.Text;
          using System.Threading;
          using System.Threading.Tasks;
          
          
          namespace ConsoleApp7
          {
              class Program
              {
                  private static ManualResetEvent resetEvent=new ManualResetEvent(false);
          
          
                  [Obsolete]
                  static void Main(string[] args)
                  {
                      //生產者
                      ConnectionFactory factory=new ConnectionFactory();
                      factory.HostName="127.0.0.1";
                      //默認端口
                      factory.Port=5672;
                      using (IConnection conn=factory.CreateConnection())
                      {
                          using (IModel channel=conn.CreateModel())
                          {
                              //在MQ上定義一個持久化隊列,如果名稱相同不會重復創建
                              channel.QueueDeclare("MyRabbitMQ", true, false, false, null);
                              Task.Run(()=>
                                  {
                                      while (true)
                                      {
                                          string message=string.Format("{0}", Console.ReadLine());  //Console.ReadLine()為控制臺輸入的內容,我們可以用其他方式獲取
                                          byte[] buffer=Encoding.UTF8.GetBytes(message);
                                          IBasicProperties properties=channel.CreateBasicProperties();
                                          properties.DeliveryMode=2;
                                          channel.BasicPublish("", "MyRabbitMQ", properties, buffer);  //入隊
                                          Console.WriteLine("入隊成功:" + message);
                                          resetEvent.Set();
                                      }
                                  });
          
          
          
          
                              while (resetEvent.WaitOne(60 * 1000))
                              {
          
          
                                  //輸入1,那如果接收一個消息,但是沒有應答,則客戶端不會收到下一個消息
                                  channel.BasicQos(0, 1, false);
          
          
                                  Console.WriteLine("Listening...");
          
          
                                  //在隊列上定義一個消費者
                                  QueueingBasicConsumer consumer=new QueueingBasicConsumer(channel);
                                  //消費隊列,并設置應答模式為程序主動應答

          運行后在控制臺輸入字符串,之后就會有接收的字符串出來,,

          一般入隊代碼和出隊代碼是寫在兩個控制臺,分別放兩個主機上執行的,為了方便測試我放在了一起 !

          • 列操作指的是從數組的前一項添加或刪除項,從數組的后一項添加或刪除項。

          push()在數組后添加項

          pop()刪除數組最后一項

          shift()刪除數組的第一項

          unshift()在數組前面添加項

          一、我們故事一用過的數組來試試。

          圖1

          push()是數組里用得最多的一種方法了,它是在數組后面追加項。

          圖2

          可能很多人忽略的就是push可以追加多個項,不僅僅是一個。

          圖3

          二、pop()與push()正好相反,它是取走數組最后一項。

          圖4

          三、shift()它是取走數組的第一項。

          圖5

          四、unshift()是在數組前添加一項,當然,它也可以一次添加多項。

          圖6


          主站蜘蛛池模板: 成人区精品人妻一区二区不卡| 日韩高清国产一区在线| 中文字幕一区二区三区乱码| 久久国产一区二区三区| 色婷婷av一区二区三区仙踪林| 日本精品3d动漫一区二区| 日本一区午夜艳熟免费| 在线电影一区二区| 精品无码一区二区三区爱欲| 韩国一区二区三区| 无码国产精品一区二区免费16| 日本强伦姧人妻一区二区| 精品国产乱子伦一区二区三区| 国产精品一区在线观看你懂的| 久久精品国内一区二区三区| 色国产精品一区在线观看| 精品一区二区三区免费观看| 国产精品亚洲综合一区在线观看| 无码成人一区二区| 岛国精品一区免费视频在线观看| 精品国产一区二区三区不卡 | 日韩精品无码一区二区三区AV | 亚洲AV成人精品一区二区三区 | 国产亚洲福利一区二区免费看| 91久久精品无码一区二区毛片| 亚洲熟妇av一区二区三区漫画| 国产一区二区在线|播放| 国产福利一区二区三区| 久久久老熟女一区二区三区| 香蕉一区二区三区观| 美女免费视频一区二区三区| 久久精品国产第一区二区三区 | 99精品久久精品一区二区| 国产亚洲综合精品一区二区三区| 欧美日韩精品一区二区在线观看 | 国产SUV精品一区二区88| 国产成人无码AV一区二区在线观看| 伊人色综合网一区二区三区| 中文字幕一区二区三区免费视频| 亚洲AV无码一区二区三区牲色 | 久久精品一区二区三区AV|