列與堆棧類似,只是插入點與移除點不同。
我們在隊列的一端添加,從另一端移除。
這一次,我們稱之為先進先出(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
}
下面是如何使用它:首先從類中初始化一個對象,然后調用它的方法。
例如:
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
*請認真填寫需求信息,我們會在24小時內與您取得聯系。