Enviado por admin el
1. ¿Qué es http_async_client?
El módulo http_async_client permite a Kamailio realizar peticiones HTTP de forma asíncrona y no bloqueante, gracias a libcurl y un sistema de workers. Esto es útil para integrar Kamailio con APIs externas sin bloquear el flujo SIP: autenticación, facturación, registro de eventos, notificaciones, etc.
2. Ventajas frente al modulo http_client
- No bloquea procesos SIP.
- Soporta múltiples peticiones simultáneas.
- Manejo de subrutas tras la recepción de la respuesta.
- Menor impacto en el rendimiento bajo alta carga.
- Acceso directo a información detallada: código HTTP, cuerpo, encabezados, errores.
3. Carga del módulo
loadmodule "http_async_client.so"
4. Parámetros importantes
modparam("http_async_client", "workers", 4)
modparam("http_async_client", "connection_timeout", 1000)
modparam("http_async_client", "hash_size", 4096)
modparam("http_async_client", "curl_follow_redirect", 1)
modparam("http_async_client", "curl_verbose", 0)
5. Ejemplo: validación de autenticación del INVITE de un usuario vía API externa
route {
if (is_method("INVITE")) {
$var(api_url) = "https://api.example.com/check?user=$fU";
http_async_query($var(api_url), "HTTP_REPLY_ROUTE");
exit;
}
}
route[HTTP_REPLY_ROUTE] {
if ($http_ok == 1 && $http_rs == 200 && $http_rb =~ "OK") {
xlog("L_INFO", "Usuario autorizado: $http_rb\n");
t_relay();
} else {
xlog("L_ERR", "Error HTTP ($http_rs): $http_err - Cuerpo: $http_rb\n");
send_reply("403", "Access Denied");
}
}
7. Pseudo Variables disponibles en la ruta callback
- $http_ok → 1 si la petición fue exitosa (CURL_OK)
- $http_err → Mensaje de error CURL si falla, $null si OK
- $http_rs → Código HTTP (ej. 200, 404)
- $http_rr → Frase de razón HTTP (ej. "OK", "Not Found")
- $http_rb → Cuerpo de la respuesta HTTP
- $http_bs → Tamaño del cuerpo de respuesta
- $http_hdr(Name) → Valor del encabezado HTTP especificado
8. Buenas prácticas
- Usa "exit;" después de invocar http_async_query()
- Limita el número de workers con base en la carga real.
- Usa $http_ok en la sub ruta configurada para verificar si la consulta ha tenido éxito.
- Siempre valida $http_rs y el contenido antes de actuar.
- Implementa timeout agresivo en producción.
9. Conclusión
El módulo http_async_client permite que Kamailio interactúe con APIs externas de forma eficiente y no bloqueante, sin comprometer el rendimiento SIP. Su uso es altamente recomendable en arquitecturas modernas que requieren lógica externa para decisiones de enrutamiento, autorización o notificación.
Documentación oficial: https://kamailio.org/docs/modules/6.0.x/modules/http_async_client.html
Comentarios recientes