欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~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),第一时间获取更多海量技术实践干货哦~