【问题标题】:Kamailio - Dispatcher determine availability via http?Kamailio - 调度程序通过 http 确定可用性?
【发布时间】:2019-08-13 09:10:17
【问题描述】:

我们目前正在使用 kamailio 中的调度程序模块来通过调度列表获取网关的可用性。

默认情况下,它会根据是否可以通过 SIP 与网关通信来使用健康检查。但是,我想知道我们是否可以通过 http 健康检查来更好地检查?

这样做的原因是,当另一端的网关礼貌关闭时,即使我们希望网关关闭,调度程序仍会向它发送调用。这会导致网关始终处于运行状态。

或者,通过在 sip 数据包中向 kamailio 发送回消息,可能会有更好的处理方法。

我已通读文档,但似乎找不到任何我想要的东西。

【问题讨论】:

    标签: sip kamailio


    【解决方案1】:

    Dispatcher 模块具有Event Routes,可以在 SIP 目标关闭/启动时调用。 HTTP 没有事件路由,因为 Dispatcher 不会在其自己的线程中不断查询它。

    或者,通过在 sip 数据包中向 kamailio 发送回消息,可能会有更好的处理方法。

    但是,您可以使用 ds_mark_dst([state]) 函数设置调度程序状态。通过这个,您可以在您正在关闭的盒子中的任何 SIP 消息中添加自定义标头,以告诉 Kamailio 的调度程序将来不要将其用作目的地。

    如果我们添加一个名为“X-SetState”的假想标头,其值为“Shutdown”,并将其从正在关闭的盒子中以 SIP 消息的形式发送到 Kamailio,我们可以通过以下方式获取它:

    is_present_hf("X-SetState"){     //If custom header is present
        xlog("Received state change request ($ru) with value $hdr(X-SetState)") 
        if($hdr(X-SetState) == "Shutdown"){ //If value of header is Shutdown
                ds_mark_dst("dp");       //Mark destatination as disabled & probing
        }
    }
    

    显然,您需要添加自己的代码来选择正确的调度程序以将其标记为非活动,并确保仅在 X-SetState 标头来自您想要标记为关闭的内部框时才对其进行解析,但您明白了.

    但是,我想知道我们是否可以通过 http 健康检查来更好地检查?

    Dispatcher 目前不支持监控 HTTP 状态,但添加它不会那么难实现,如果您在 C 方面得心应手,您可以添加支持或添加功能请求。

    或者,您可以编写一个脚本来监控每个设备的 HTTP 状态,如果没有得到响应,则使用 Kamcmd / Kamctl 将调度程序组设置为关闭。

    【讨论】:

    • 谢谢尼克,我应该能够实现你的建议。尽管我有 5 年的电信经验,但我对 Kamailio 还是很陌生。您是否推荐任何入门课程/网站,因为您似乎非常精通该主题?
    • @turner 我在学习 Kamailio 时发现很难全面了解该平台,有大量关于特定功能的文档以及有关如何使用这些功能的详细信息,但并不像关于如何整体使用 Kamailio 的一般概述。我在我的博客上写了一个 Kamailio 101 教程系列来尝试和分享基础知识:nickvsnetworking.com/tag/kamailio-101参与 Kamailio 项目的每个人都非常友好并且乐于提供帮助,所以如果你遇到困难,请随时联系。
    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2016-09-27
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多