操作系统 :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 获取。

opensips的dispatcher模块笔记的更多相关文章

  1. python日志模块笔记

    前言 在应用中记录日志是程序开发的重要一环,也是调试的重要工具.但却很容易让人忽略.之前用flask写的一个服务就因为没有处理好日志的问题导致线上的错误难以察觉,修复错误的定位也很困难.最近恰好有时间 ...

  2. 爬虫-request以及beautisoup模块笔记

    requests模块 pip3 install requests res = requests.get('') res.text res.cookies.get_dict() res.content ...

  3. python系统性能模块笔记

    内存信息psutil.cpu_times()            使用cpu_times方法获取cpu完整信息,需要显示所有逻辑cpu信息(指定变量percpu=True)psutil.cpu_ti ...

  4. Python模块笔记

    __name__属性 一个模块被另一个程序第一次引入时,其主程序将运行.如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行. #!/ ...

  5. MSF里MS17_010利用模块笔记

    1.   auxiliary/scanner/smb/smb_ms17_010      //扫描检测漏洞辅助模块 扫描结果这里可以看到 2,3,4这几台主机存在此漏洞! 2.     auxilia ...

  6. Node.js http等模块 笔记05

    一.http模块 const http = require('http'); http.createServer((req,res)=>{ //1 设置响应头 res.writeHead(200 ...

  7. 【Python】Python学习----第一模块笔记

    1.python是什么? python是动态解释型的强类型定义语言. python官方版本的解释器是CPython.该解释器使用C语言开发. 当前主要使用3.x版本的python. 2.第一个pyth ...

  8. requests 模块笔记

    import requests 请求方式: requests.get("https://www.baidu.com") requests.post("http://htt ...

  9. MSF系列--MS17_010利用模块笔记

    1.   auxiliary/scanner/smb/smb_ms17_010      //扫描检测漏洞辅助模块 扫描结果这里可以看到 2,3,4这几台主机存在此漏洞! 2.     auxilia ...

  10. subprocess模块笔记

    subprocess笔记 import subprocess subprocess.call("netstat -ano") #父进程等待子进程完成任务,返回执行结果和结束信息0或 ...

随机推荐

  1. LVM精简卷(Thinly-Provisioned Logical Volumes)

    可能LVM大家都比较熟悉,那么精简卷又是干什么的呢?相比于普通LVM有什么优势,又会带来哪些新的问题?带着这些我们来一探究竟: 工作原理 在创建Thin"瘦"卷时,预分配一个虚拟的 ...

  2. 【Map】【List】【数组】获得两个数组的交集

    给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [1,2,2 ...

  3. 责任链模式与spring容器的搭配应用

    背景 有个需求,原先只涉及到一种A情况设备的筛选,每次筛选会经过多个流程,比如先a功能,a功能通过再筛选b功能,然后再筛选c功能,以此类推.现在新增了另外一种B情况的筛选,B情况同样需要A情况的筛选流 ...

  4. Python中 r'', b'', u'', f'' 的含义

    python中 r'', b'', u'', f'' 的含义   r/R:非转义的原始字符串 与普通字符相比,其他相对特殊的字符,其中可能包含转义字符,即那些,反斜杠加上对应字母,表示对应的特殊含义的 ...

  5. 用random.simple来解决从0-99这100个数中随机取10个不重复的数

    语法: random.simple(list,k) 返回以长度为k的新列表,新列表存放list所产生k个随机不重复的元素 import random print(random.simple(range ...

  6. 【Azure 应用服务】App Service 通过门户配置数据库连接字符串不生效 

    应用设置 Application Setting 在应用服务中,应用设置是作为环境变量传递给应用程序代码的变量. 对于 Linux 应用和自定义容器,应用服务使用 --env 标志将应用设置传递到容器 ...

  7. 「实操」结合图数据库、图算法、机器学习、GNN 实现一个推荐系统

    本文是一个基于 NebulaGraph 上图算法.图数据库.机器学习.GNN 的推荐系统方法综述,大部分介绍的方法提供了 Playground 供大家学习. 基本概念 推荐系统诞生的初衷是解决互联网时 ...

  8. .NET周刊【3月第1期 2024-03-03】

    国内文章 推荐10款C#开源好用的Windows软件 https://www.cnblogs.com/Can-daydayup/p/18035760 DevToys.Microsoft PowerTo ...

  9. C++ //统计元素个数 //统计内置数据类型 //统计自定义数据类型

    1 //统计元素个数 2 3 #include<iostream> 4 #include<string> 5 #include<vector> 6 #include ...

  10. MacOS安装gRPC C++

    从源码安装gRPC C++ 环境准备 $ [sudo] xcode-select --install $ brew install autoconf automake libtool shtool $ ...