3種freeswitch訪問redis方案的分析
由于項目的原因,需要在freeswitch的撥號計劃中根據redis中特定key的值,判斷后續(xù)的操作是轉發(fā)請求或者播放錄音。這里需要freeswitch中實現對redis的操作,目前實現的方案有三:
創(chuàng)建一個java工程服務,通過esl和freeswitch交互,在java工程實現從redis獲取數據。此方案優(yōu)點是靈活性強,功能強大。缺點是實現較復雜,為了一個簡單的功能需要創(chuàng)建一個java服務,有點殺雞用牛刀
通過mod_hiredis模塊對redis進行操作。此方案中可以直接在撥號計劃使用mod_hiredis,(用法如下:<action application="set" data="redisValue=${hiredis_raw default get Callers}"/>)。但是這個模塊有個bug,在freeswitch 1.6版本中mod_hiredis不支持password參數,即mod_hiredis只能連接沒有密碼的redis。這是freeswitch的一個bug,直到freeswitch 1.8版本此bug才被修復。我們生產環(huán)境的redis是帶密碼的,所以此方案不符合我們的要求
freeswitch集成了lua,我們可以通過lua腳本實現對redis的操作,實現簡單,功能較強大。這是我們最終的選擇的方案。
本文會對第3個方案進行詳細介紹。
freeswitch在撥號計劃中通過lua實現對redis進行操作
安裝lua5.2, luarocks
Freeswitch的安裝環(huán)境為Debian 8
freeswitch1.6 默認集成的lua的版本5.2。不要使用apt-get安裝,因為apt-get intall luarocks 這個默認安裝出來的lua版本是5.1。所以我們源碼安裝lua5.2, luarocks。為了保證安裝正確,我們最好在進行如下操作前,將系統(tǒng)自帶的lua和luarocks通過apt-get刪除。
安裝lua5.2
下載安裝包:wget http://www.lua.org/ftp/lua-5.2.4.tar.gz
進入解壓目錄 ,執(zhí)行如下命令:
apt-get install make? // make需要額外安裝
make linux // 設置安裝平臺
make install // 執(zhí)行安裝123
安裝luarocks
下載安裝包:wget http://luarocks.github.io/luarocks/releases/luarocks-2.4.4.tar.gz
進入解壓目錄 ,執(zhí)行如下命令:
./configure; sudo make bootstrap1
執(zhí)行命令luarocks,如果提示”Lua version: 5.2”,則表示安裝成功。如果這里提示是lua5.1,可以先卸載lua5.1,再安裝lua5.2,重新執(zhí)行以上安裝步驟
...
CONFIGURATION
? ? ? ? Lua version: 5.2
? ? ? ? Configuration files:
? ? ? ? ? ? ? ? System: /usr/local/etc/luarocks/config-5.2.lua (ok)
? ? ? ? ? ? ? ? User? : /root/.luarocks/config-5.2.lua (not found)123456
配置freeswitch的lua
配置autoload_configs/lua.conf.xm,配置so和lua文件的目錄(這里路徑是luarocks控件的.lua和.so的保存位置)。
<param name="module-directory" value="/usr/local/lib/lua/5.2/?.so"/>
<param name="script-directory" value="/usr/local/share/lua/5.2/?.lua"/>12
安裝 redis-lua插件
redis-lua插件封裝了對redis操作,redis-lua用法詳細見官網
luarocks install redis-lua1
刷新配置
在fs_cli執(zhí)行如下兩條命令,刷新新的配置(如果在測試過程出現執(zhí)行如下命令時,不能刷新配置,請重啟freeswitch):
reloadxml
reload mod_lua12
書寫lua腳本,配置到freewitch的撥號計劃
test-pwd.lua
此腳本功能訪問redis,并獲取一個值,并打印
freeswitch.consoleLog("INFO", "--123------TEST")
local redis = require 'redis'
local params = {
? ? host = '127.0.0.1',
? ? port = 6999
}
local client = redis.connect(params)
client:auth("password")
freeswitch.consoleLog("INFO", "--------TEST connect")
local value = client:get("open_flag")
freeswitch.consoleLog("INFO", value)? 1234567891011
在fs_cli執(zhí)行l(wèi)ua腳本,執(zhí)行成功
lua /etc/freeswitch/script/test-pwd.lua1
在撥號計劃中使用使用lua腳本,則配置腳本如下
<action application="lua" data="/etc/freeswitch/script/test-pwd.lua"/>
---------------------
本文來自 hry2015 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/hry2015/article/details/81583890?utm_source=copy