背景
动态路由可以根据前缀,被叫/组,时间,权重等因素来选择最优的路由路径。
官方文档:drouting
本次测试的opensips版本为:
version: opensips 3.5.5 (x86_64/linux)
配置解析
|
|
该模块总共使用dr_rules
,dr_gateways
,dr_carriers
,dr_groups
,dr_partitions
五张表。
重要函数
do_routing([groupID], [flags], [gw_whitelist], [rule_attrs_pvar], [gw_attrs_pvar], [carrier_attrs_pvar], [partition])
根据规则路由
route_to_carrier( carriers, [gw_attrs_pvar], [carrier_attrs_pvar], [partition])
路由到carriers表
route_to_gw(gw_id, [gw_attrs_var], [carrier_attrs_var], [partition])
路由到gw_id网关
use_next_gw( [rule_attrs_pvar], [gw_attrs_pvar], [carrier_attrs_pvar], [partition])
使用下一个网关
goes_to_gw( [type], [flags], [gw_attrs_pvar], [carrier_attrs_pvar], [partition])
判断当前的请求URI是否路由到网关
is_from_gw([type], [flags], [gw_attrs_pvar], [carrier_attrs_pvar], [partition])
判断当前的发送信息(source IP + source port)是否路由到网关
dr_is_gw( sip_uri, [type], [flags], [gw_attrs_pvar], [carrier_attrs_pvar], [partition])
判断sip_uri是否路由到网关
dr_disable([partition])
设置路由禁用
dr_match(groupID, [flags], number, [rule_attrs_pvar], [partition])
number 和 groupID 匹配
实战
配置示例
|
|
dr_gateways
表插入数据:
|
|
dr_groups
表插入数据:
|
|
dr_rules
表插入数据:
|
|
dr_carriers
表插入数据:
|
|
测试
使用软电话1004拨打1008, 可以看到的信令图:
目前只成功使用route_to_gw
, 其他的do_routing
,route_to_carrier
没使用成功。