squirrelmq

squirrelmq是一個快速的訊息佇列,使用Slab記憶體分配算法來降低記憶體碎片,使用epoll來解決高並發問題。效率比redis要高,使用簡單。不用擔心數據丟失。可以制定自己的處理佇列程式。

簡介,特性,使用技巧,客戶端API,Lua處理佇列,

簡介

SquirrelMQ是一個快速的訊息佇列

特性

SquirrelMQ特性:
1. SquirrelMQ使用Slab記憶體分配算法來降低記憶體碎片,使用epoll來解決高並發問題。效率比redis要高,使用簡單。
2. 另外SquirrelMQ支持持久化,在down機的情況下也不用擔心數據丟失。
3. SquirrelMQ支持lua腳本,你可以制定自己的處理佇列程式,只要在cron/main.lua中編寫代碼即可。

使用技巧

下面,我們介紹使用SquirrelMQ訊息佇列來完成上面所說的套用吧。
1) 安裝Lua。
2) 首先下載編譯SquirrelMQ:
#> wget
#> tar –zxvf squirrel-with-lua-v1.2.zip
#> cd squirrel-with-lua-v1.2
#> make
3) 修改SquirrelMQ配置(squirrel.conf檔案):
# 偵聽連線埠
listingPort 6061
# 最大可以使用記憶體數(單位:位元組)
memoryLimitUsed 524288000
# 多長時間進行存儲數據到硬碟(防止down機時數據丟失,單位為秒)
secondsToSaveDisk 30
# 多少次數據變化才進行存儲數據到硬碟(防止寫數據過於頻繁)
chagesToSaveDisk 30
# 客戶端連線多長時間不操作自動關閉(單位為秒)
clientExpiredTime 60
# 多長時間運行一次cron(單位為毫秒)
cronLoops 5000
# 是否開啟Lua處理執行緒
enableLuaThread 1
# 是否使用守護進程模式運行
daemonize 0
我們根據自己的需求來修改配置,特別說明一下的是,當開啟Lua處理執行緒時,我們可以編寫Lua腳本來處理佇列(在cron/main.lua)。這樣就可以讓伺服器本身來處理訊息佇列的數據,而不用另外寫一個cron程式來處理。下面我們會介紹。
4) 運行SquirrelMQ:
#> ./squirrel –c squirrel.conf

客戶端API

SquirrelMQ提供一個PHP訪問的API,在php/squirrel.class.php。我們可以使用這個API檔案輕鬆地訪問SquirrelMQ。
這個API檔案把所有訪問SquirrelMQ的操作封裝成一個類,叫Squirrel,在使用時直接new一個Squirrel的對象即可SquirrelMQ支持的API有:
1)插入到佇列的頭部:
$smq->push_head($message);
2)插入到佇列的尾部:
$smq->push_tail($message);
3)取得佇列的第一條訊息,並從佇列中刪除:
$message = $smq->pop_head();
4)取得佇列的最後一條訊息,並從佇列中刪除:
$message = $smq->pop_tail();
5)取得佇列的第n條訊息,並且從佇列中刪除:
$message = $smq->pop_index($index);
6)取得佇列的第一條訊息,但不從佇列中刪除:
$message = $smq->get_head();
7)取得佇列的最後一條訊息,但不從佇列中刪除:
$message = $smq->get_tail();
8)取得佇列的第n條訊息,但不從佇列中刪除:
$message = $smq->get_index($index);
9)取得佇列的大小:
$size = $smq->size();
10)取得佇列的狀態:
$stat = $smq->stat();

Lua處理佇列

SquirrelMQ的一個令人興奮的特性就是支持使用Lua處理佇列中的訊息,下面我們來介紹一下這個功能。
要開啟Lua處理執行緒,需要在配置檔案中把enableLuaThread設定為1。這樣SquirrelMQ就會開啟Lua處理執行緒。我們可以在cron/main.lua檔案中編寫我們的Lua代碼來處理佇列中的訊息。在cron/main.lua檔案中,必須編寫一個 main 的函式,SquirrelMQ就是以這個函式作為入口。

相關詞條

熱門詞條

聯絡我們