歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~java
您可能已經熟悉Asterisk,一個普遍部署的開源Telephony框架。若是你不太熟悉,你應該適當瞭解一下。這是一個很是酷的軟件。能夠部署Asterisk的低負載實例來使用文件系統來存儲電話註冊數據和語音郵件等內容。可是若是你想使用Asterisk作任何事情,或者若是你碰巧關心諸如容錯之類的事情,你可能會考慮將Asterisk指向數據庫。若是你碰巧有一個大的Asterisk集羣構建來處理重要的負載,你能夠考慮指向一個可彈性擴展的數據庫的Asterisk。在這篇文章中,我將引導您經過NuoDB在一臺基於RPM的Linux機器上設置Asterisk的最小化安裝。Asterisk能夠跨越多個數據中心進行遠程的安裝,但我會將這些問題留給更專業的人士。將這樣的安裝與NuoDB配對至少會讓數據庫痛苦不堪。讓咱們開始吧。sql
首先,下載並安裝NuoDB。數據庫
sudo rpm -i nuodb.rpm
這將在該主機上啓動一個NuoDB代理。接下來,咱們啓動一個事務引擎和存儲管理器:瀏覽器
java -jar /opt/nuodb/jar/nuodbmanager.jar --broker localhost --user domain --password bird --command "start process sm database asteriskCDR host localhost archive /tmp/ast-cdr initialize yes" java -jar /opt/nuodb/jar/nuodbmanager.jar --broker localhost --user domain --password bird --command "start process te database asteriskCDR host localhost options '--dba-user asteriskUser --dba-password mySecret'"
儘管Asterisk支持直接與MySQL和PostgreSQL鏈接,但更多測試和強化的途徑是經過ODBC鏈接到數據庫。在這裏,咱們安裝unixODBC,這是Unix類操做系統的ODBC驅動程序管理器。微信
as root: yum install gcc gcc-c++ ncurses-devel unixODBC unixODBC-devel
這建立了兩個文件:/etc/odbc.ini和/etc/odbcinst.ini,咱們如今編輯該文件以指向咱們的NuoDB實例。網絡
/etc/odbc.ini [NuoODBC] Description = NuoDB ODBC3 Driver DSN Driver = /opt/nuodb/lib64/libNuoODBC.so Database = asteriskCDR ServerName = localhost User = asteriskUser Password = mySecret Schema = user
咱們可讓/etc/odbcinst.ini爲空,或者若是你想啓用(很是詳細!)日誌記錄:app
/etc/odbcinst.ini [ODBC] TraceFile = /tmp/odbc.log Trace = Yes
這些毫不是惟一可讓unixODBC啓動並運行的選項,但如今咱們將爲此進行推廣。讓咱們確保到目前爲止咱們所作的工做:框架
isql NuoODBC asteriskUser mySecret -v -3 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
在撰寫本文時,Asterisk當前測試和穩定版本是11.4.0,但您能夠在這裏查看您選擇的版本。dom
as root: yum install libtool-ltdl libtool-ltdl-devel sqlite-devel libxml2-devel openssl-devel libuuid-devel cd /usr/src wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-11.4.0.tar.gz wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-11.4.0.tar.gz.sha1 sha1sum -c asterisk-11.4.0.tar.gz.sha1 tar zxvf asterisk-11.4.0.tar.gz cd asterisk-11.4.0 ./configure --libdir=/usr/lib64 --disable-xmldoc make menuselect && make && make install && make samples && make config
在make menuselect期間,請檢查呼叫詳細記錄(CDR)以確保cdr_odbc已啓用。按q離開使用menuselect。以後,你能夠獲得一杯咖啡,花幾分鐘時間查看恐龍漫畫。若是您的系統上的編譯成功,而且make install階段能夠識別您的發行版,那麼您應該可以啓動Asterisk服務:
sudo service asterisk start
Asterisk能夠以各類方式使用數據庫。例如,咱們將設置CDR日誌記錄。
/etc/asterisk/cdr_odbc.conf [global] dsn=NuoODBC loguniqueid=no dispositionstring=yes table=cdr usegmtime=yes hrtime=yes /etc/asterisk/res_odbc.conf [NuoODBC] enabled => yes dsn => NuoODBC username => asteriskUser password => mySecret pre-connect => yes sanitysql => select 1 from dual
咱們強制從新加載配置文件:
sudo service asterisk restart
如今咱們能夠在Asterisk控制檯中用一個簡單的命令來檢查數據庫鏈接。
asterisk -rvvv <snip> p131*CLI> odbc show ODBC DSN Settings ----------------- Name: NuoODBC DSN: NuoODBC Last connection attempt: 2013-09-03 10:45:41
正如您可能已經猜到的那樣,咱們會將通話詳細記錄記錄到名爲cdr的表格中。咱們來建立表格:
/opt/nuodb/bin/nuosql asteriskCDR --user asteriskUser --password mySecret <<EOF CREATE SEQUENCE "SEQ_cdr_cdrID" START WITH 1; CREATE TABLE "cdr" ("cdrID" REAL GENERATED BY DEFAULT AS IDENTITY("SEQ_cdr_cdrID") NOT NULL, "calldate" TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', "clid" VARCHAR(80) NOT NULL DEFAULT '', "src" VARCHAR(80) NOT NULL DEFAULT '', "dst" VARCHAR(80) NOT NULL DEFAULT '', "dcontext" VARCHAR(80) NOT NULL DEFAULT '', "channel" VARCHAR(80) NOT NULL DEFAULT '', "dstchannel" VARCHAR(80) NOT NULL DEFAULT '', "lastapp" VARCHAR(80) NOT NULL DEFAULT '', "lastdata" VARCHAR(80) NOT NULL DEFAULT '', "duration" INTEGER NOT NULL DEFAULT '0', "billsec" INTEGER NOT NULL DEFAULT '0', "disposition" VARCHAR(45) NOT NULL DEFAULT '', "amaflags" INTEGER NOT NULL DEFAULT '0', "accountcode" VARCHAR(20) NOT NULL DEFAULT '', PRIMARY KEY ("cdrID")); CREATE INDEX "IDX_cdr_calldate" ON "cdr" ("calldate"); CREATE INDEX "IDX_cdr_dst" ON "cdr" ("dst");
爲了代表這一切都有效,咱們將在/etc/asterisk/extensions.conf底部添加幾行Dialplan,並用SIPp測試設置。
/etc/asterisk/extensions.conf [sipp] exten => 123,1,Answer exten => 123,2,SetMusicOnHold(default) exten => 123,3,WaitMusicOnHold(2) exten => 123,4,Hangup /etc/asterisk/sip.conf [sipp] type=friend context=sipp host=dynamic user=sipp canreinvite=no disallow=all allow=ulaw
咱們再次強制從新加載配置文件,並安裝SIPp:
as root: service asterisk restart yum install sipp
若是您的發行版的存儲庫不包含SIPp,解決辦法也很簡單。爲了測試咱們的安裝,咱們運行如下命令。您能夠經過查看Asterisk控制檯中的日誌來驗證SIPp是否指向了您的Asterisk實例。
sipp -d 2000 -s 123 127.0.0.1 -l 10 -timeout 4s
如今咱們能夠經過發出後看到一個非零數字來確認咱們有通話記錄:
echo "select count(*) from cdr;" | /opt/nuodb/bin/nuosql asteriskCDR --user asteriskUser --password mySecret
因爲Asterisk是一個能夠運行各類電話應用程序的框架,所以它與數據庫之間有任意多個可能的鏈接點。咱們已經測試了CDR功能以及其餘一些路徑,但咱們很樂意提供您的反饋。請讓咱們知道您使用Asterisk和NuoDB的經歷!
問答
爲移動瀏覽器設置電話連接的可靠方法是什麼?
相關閱讀
如何獲取iOS應用網絡權限
針對.NET開發者的NuoDB 1.1發佈
Android Service 系統服務
此文已由做者受權騰訊雲+社區發佈,原文連接:https://cloud.tencent.com/developer/article/1144402?fromSource=waitui
歡迎你們前往騰訊雲+社區或關注雲加社區微信公衆號(QcloudCommunity),第一時間獲取更多海量技術實踐乾貨哦~