Kamailio - 调度员通过 http 确定可用性?

Kamailio - Dispatcher determine availability via http?

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

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

这是因为当另一端的网关正常关闭时,即使我们希望盒子关闭,调度程序仍然会向它发送调用。这导致网关一直保持运行状态。

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

我已经通读了文档,但我似乎无法找到我正在寻找的东西。

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

Alternatively there might be a better way of handling this by sending a message back in the sip packet to kamailio.

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

如果我们添加一个名为 "X-SetState" 的虚构 header,其值为 "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
    }
}

显然,您需要将自己的代码添加到 select 正确的调度程序以标记为不活动,并确保 X-SetState header 仅在来自您的内部时才被解析您想要标记为向下的框,但您明白了。

However, I would like to know if we can make the check better by also checking via a http health check?

Dispatcher 目前不支持监视 HTTP 状态,但添加它并不难实现,如果您在 C 方面很方便,您可以添加支持或添加功能请求。

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