opensips的dispatcher模块笔记

操作系统 :CentOS 7.6_x64
opensips版本:2.4.9

dispatcher模块模块实现了基于目的地址的调度功能,可用作无状态负载均衡,但不能保证均匀分配。今天整理下CentOS7环境下opensips2.4.9的dispatcher模块使用示例,并提供运行效果视频。

我将从以下几方面进行展开:

  • 模块数据库说明

  • 模块参数说明

  • 模块函数说明

  • 模块使用示例

dispatcher模块官方文档:https://opensips.org/docs/modules/2.4.x/dispatcher.html

一、模块数据库说明

数据表:dispatcher

这里大概列举下字段说明,具体信息参考官方文档:

https://www.opensips.org/Documentation/Install-DBSchema-2-4#GEN-DB-DISPATCHER

字段说明:

  • setid

    目的地址的id值,相同setid可以由多个地址,具体选择那个地址可根据设定的算法进行选择。

  • destination

    目的地址,示例:

    sip:192.168.1.100:5060

  • socket

    本地用来发送探测包(options或info)的socket地址,必须是opensips已绑定的地址。

    比如opensip地址是 192.168.1.101 ,这里的socket可以是:

    udp:192.168.1.101:5060

    tcp:192.168.1.101:5060

  • state

    对目的地的状态检测结果

    0 可用

    1 不可用

    2 检测中

  • weight

    权重。

  • priority

    优先级。

  • attrs

    可理解为自定义标签。

  • description

    描述信息,可用来备注该条目的用途。

二、模块参数说明

这里列举下常用参数,完整内容参考官方文档。

模块文件:dispatcher.so

模块参数如下:

  • partition

    分区,用于定义数据源。

  • table_name

    用于设置数据表,默认是 dispatcher 表。

  • db_url

    用于设置数据库连接信息。

  • ds_probing_mode

    探测模式,定义如下:

    0 :仅检查处于探测中的网关

    1 :检查所有网关

  • ds_ping_interval

    ping的间隔,默认是0秒(关闭ping)。

  • ds_ping_method

    ping方法,默认是发 OPTIONS 包,可以配置为发 INFO 包:

    modparam("dispatcher", "ds_ping_method", "INFO")

  • ds_ping_from

    sip消息的from头

  • ds_ping_maxfwd

    ping消息的最大转发次数。

  • ds_probing_threshhold

    从可用状态到探测中,需要连续检查的次数,默认值为3次。

此外还有设置各个列名的参数,可根据实际情况使用。

模块加载及配置数据库

文件:opensips.cfg

配置示例可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20240327 获取。

三、函数说明

这里列下常用的ds_select_dst函数,其它函数参考官方文档。

ds_select_dst(set, alg [, (flags M max_results)*])

该函数从给定的集合中选取一条路由,会重写sip的目的地址,在opensips内部则体现为重新 $du

  • set

    集合id,对应数据库中的setid字段。

  • alg

    目的地址选择算法,同一个setid下有多条记录时适用。

    部分算法说明(更多说明参考官方文档):

    0 :根据callid的哈希值

    1 :根据from uri的哈希值

    2 :根据to uri的哈希值

    3 :根据request uri的哈希值

    4 :带权重的轮询

    5 :根据authorization-username的哈希值

    6 :随机算法

函数使用示例可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240327 获取。

四、使用示例

这里演示下dispatcher模块的加载,及使用该模块实现话务调度的功能。

机器列表:

freeswitchA :192.168.137.31:5080

opensips :192.168.137.33:5060

freeswitchB :192.168.137.32:5080

测试目标:

将freeeswitchA呼叫opensips的通话路由到freeswitchB机器。

1、数据库配置

数据表:dispatcher

将1001这个组的呼叫路由到freeswitchB机器:

复制代码
INSERT INTO `opensips`.`dispatcher` (`id`, `setid`, `destination`, `socket`, `attrs`, `description`) 
VALUES (1, 1001, 'sip:192.168.137.32:5080', 'udp:192.168.137.33:5060', 'fstest1', 'freeswitchB gw');

数据库效果:

2、cfg配置

文件:opensips.cfg

配置:

3、运行效果

fs机器:192.168.137.31

测试命令:

复制代码
originate {}sofia/external/111@192.168.137.33:5060 &echo

运行效果如下:

抓包效果:

运行效果视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2024032701 获取。

五、资源下载

本文涉及资源,可以从如下途径获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240327 获取。

相关推荐
贾宝玉的玉宝贾11 天前
FreeSWITCH 简单图形化界面29 - 使用mod_xml_curl 动态获取配置、用户、网关数据
数据库·voip·freeswitch·ippbx·sip测试
c_zyer23 天前
Kamailio-超强dispatcher负载均衡模块
负载均衡·kamailio·voip·sip
Mike_Zhang1 个月前
使用kamailio进行分机注册及互拨
kamailio·voip
Mike_Zhang2 个月前
debian10环境安装rtpengine
voip
Mike_Zhang4 个月前
FreeSWITCH使用soundtouch进行变声
python·voip·freeswitch·音频技术
Mike_Zhang5 个月前
opensips开启lua支持
lua·voip·opensips
Mike_Zhang5 个月前
python3使用dpkt生成PCMA格式rtp流
python·voip
Mike_Zhang5 个月前
opensips开启python支持
python·voip·opensips
贾宝玉的玉宝贾5 个月前
FreeSWITCH 1.10.10 简单图形化界面15 - JsSIP媒体控制(LookLook)
webrtc·媒体·voip·freeswitch·ippbx