整合營銷服務商

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

          免費咨詢熱線:

          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一区二区软件| 日本一区二区三区中文字幕| 久久精品成人一区二区三区| 一区二区三区四区精品视频 | 国产亚洲一区二区三区在线| 精品国产日韩亚洲一区在线| 亚洲一区无码中文字幕乱码| 久久久久一区二区三区| 韩日午夜在线资源一区二区| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 亚洲AV无码一区二区三区系列 | 国产精品一区二区AV麻豆| 日韩人妻一区二区三区免费| 国产成人精品无人区一区| 国产一区二区三区播放| 日韩一区二区在线免费观看| 国产精品视频一区国模私拍| 无码福利一区二区三区| 无码人妻精品一区二区蜜桃网站| 另类免费视频一区二区在线观看| 国产亚洲3p无码一区二区| 亲子乱AV视频一区二区| 久久综合精品国产一区二区三区| 国产观看精品一区二区三区| 一区二区精品视频| 久久国产香蕉一区精品| 成人无码AV一区二区| 日本亚洲国产一区二区三区| 国产av一区二区三区日韩 | 国产福利一区二区三区在线观看| 亚洲熟妇av一区二区三区下载| 无码国产精品一区二区免费式直播| 亚洲AV无码一区二区一二区| 日韩精品中文字幕视频一区| 福利一区在线视频| 国产乱码精品一区二区三| 精品国产日产一区二区三区|