Módulo de procesamiento de servicios NGINX
Requisitos previos
- Plataforma de Linux
- La versión nginx no es inferior a
1.9.11 - Herramientas instaladas para la compilación NGINX
Características del módulo
- Los mensajes de solicitud/respuesta de servicio están todos en formato
json . La biblioteca cJSON se compila de forma predeterminada. Los desarrolladores de negocios pueden usarlo para analizar/paquetes de paquetes y, por supuesto, también pueden usar otras bibliotecas de análisis json (ver example/third_test ) - Al implementar una interfaz específica, compile el servicio en una biblioteca dinámica y cargándolo en Nginx
ventaja
- Alto rendimiento , utilizando el modelo multiproceso de Nginx para procesar negocios, y los desarrolladores de negocios también pueden usar múltiples subprocesos en la interfaz implementada de acuerdo con escenarios específicos para mejorar aún más el rendimiento, y también pueden escalar horizontalmente a través del equilibrio de carga.
- Fuerte , cuando el servicio se bloquea, Nginx reiniciará el proceso de trabajo para garantizar que la empresa no deje de procesar
- Servicio de reinicio/actualización sin problemas . Con la ayuda de la función de reinicio/actualización suave de Nginx, el reinicio/actualización del servicio se puede reiniciar/actualizar elegantemente.
Construir
1. Descargue el código fuente de Nginx
# 这里以 nginx-1.24.0 为例, 也可以根据自己情况下载其他版本的 nginx 源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz
2. Descomprima e ingrese el directorio de código fuente de NGINX
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
3. Tire del código de este proyecto
# 这里拉取到 nginx 源码的目录下, 也可以根据情况拉取到其他目录
git clone https://github.com/xukeawsl/ngx_http_service_module.git
4. Agregue el módulo a Nginx e instálelo
# 如果你将项目代码放在其他路径, 则需要修改这里的模块路径
./configure --add-module=ngx_http_service_module
make
make install
Comandos de configuración
1. MODULE_PATH (solo se puede configurar en el bloque HTTP)
- Este comando configura la ruta a la que pertenece la biblioteca dinámica. Si no está configurado, instale la búsqueda de ruta de búsqueda predeterminada
- El primer parámetro es la ruta, seguida del nombre del archivo de la biblioteca dinámica (nombre completo)
module_path {
/ path/to /dir1 module1.so;
/ path/to /dir2 module2.so module3.so;
} 2. MODULE_DEPENDIDAD (solo se puede configurar en el bloque HTTP)
- Esta configuración establece las dependencias entre bibliotecas dinámicas
- El primer parámetro es la biblioteca dinámica que depende, seguida de la biblioteca dinámica en la que depende
module_dependency {
module1. so module2.so;
module3. so module2.so libjsoncpp.so;
} 3. Servicio (solo se puede configurar en el bloque HTTP)
- Servicios proporcionados por este módulo de configuración de configuración
- El primer parámetro es el nombre de archivo de la biblioteca dinámica, seguido del nombre del servicio proporcionado para la biblioteca dinámica (sensible a la caja)
- El nombre del servicio debe ser globalmente único
service {
module1. so srv_echo srv_datetime;
module2. so srv_sayHello;
module3. so srv_getSum;
} 4. Service_mode (http, servidor, bloques de ubicación se pueden configurar)
- Utilizado para habilitar las funciones del módulo, las piezas no habilitadas no se procesarán para el servicio
- No habilitado por defecto, el siguiente ejemplo está habilitado a nivel mundial en el servidor especificado, pero la solicitud de enrutamiento para
/test no se procesa
http {
server {
sevice_mode on;
location /test {
service_mode off;
}
}
}Desarrollo de interfaz de servicio
- Los usuarios deben incluir el archivo de interfaz
ngx_http_service_interface.h en el proyecto
// 接口形如下面的函数
#include "ngx_http_service_interface.h"
#include "cJSON.h"
void srv_sayHello ( const ngx_request_t * rqst , ngx_request_t * resp )
{
// do something...
}- Estructura de solicitud/respuesta
// 请求结构只包含一个 const char * 指针指向 json 请求字符串
struct ngx_json_request_s {
const char * data ;
};
// 响应结构包含一个 char * 指针指向 json 响应字符串和一个回调函数用于释放响应字符串的内存
// 因为对于 c++ 实现的服务可能使用 new 来分配内存, 那就需要指定正确的内存释放方式
struct ngx_json_response_s {
char * data ;
void ( * release )( void * );
};Reglas de llamadas de servicio
- El método de solicitud requiere
POST - Especifique el servicio a llamar por el valor del
Service-Name de encabezado HTTP -
Content-Type debe ser de tipo json - De la siguiente manera, llame al servicio
srv_sayHello
curl -X POST " http://localhost/service_test "
-H ' Content-Type: application/json '
-H ' Service-Name: srv_sayHello '
-d ' {"data": "xxxx"} '