Module de traitement de service NGINX
Condition préalable
- Plate-forme Linux
- La version Nginx n'est pas inférieure à
1.9.11 - Outils installés pour la compilation Nginx
Caractéristiques du module
- Les messages de demande de service / réponse sont tous au format
json . La bibliothèque cJSON est compilée par défaut. Les développeurs d'entreprises peuvent l'utiliser pour analyser / paquets de package, et bien sûr, ils peuvent également utiliser d'autres bibliothèques d'analyse json (voir example/third_test ) - En implémentant une interface spécifique, compilez le service dans une bibliothèque dynamique et chargez-la dans nginx
avantage
- Haute performance , en utilisant le modèle multi-processus de Nginx pour traiter les entreprises, et les développeurs d'entreprises peuvent également utiliser le multi-threading dans l'interface implémentée en fonction de scénarios spécifiques pour améliorer encore les performances, et peut également évoluer horizontalement grâce à l'équilibrage de la charge.
- Strong , lorsque le service se bloque, Nginx redémarrera le processus de travail pour s'assurer que l'entreprise n'arrête pas de traiter
- Service de redémarrage / mise à niveau en douceur . À l'aide de la fonction de redémarrage / mise à niveau en douceur de Nginx, le redémarrage / mise à niveau du service peut être élégamment redémarré / mise à niveau.
Construire
1. Télécharger le code source Nginx
# 这里以 nginx-1.24.0 为例, 也可以根据自己情况下载其他版本的 nginx 源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz
2. Décompressez et entrez le répertoire de code source Nginx
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
3. Tirez le code de ce projet
# 这里拉取到 nginx 源码的目录下, 也可以根据情况拉取到其他目录
git clone https://github.com/xukeawsl/ngx_http_service_module.git
4. Ajouter le module à nginx et l'installer
# 如果你将项目代码放在其他路径, 则需要修改这里的模块路径
./configure --add-module=ngx_http_service_module
make
make install
Commandes de configuration
1. module_path (ne peut être configuré que dans le bloc HTTP)
- Cette commande configure le chemin vers lequel appartient la bibliothèque dynamique. S'il n'est pas configuré, installez la recherche de chemin de recherche par défaut
- Le premier paramètre est le chemin, suivi du nom du fichier dynamique de la bibliothèque (nom complet)
module_path {
/ path/to /dir1 module1.so;
/ path/to /dir2 module2.so module3.so;
} 2. module_dependency (ne peut être configuré que dans le bloc HTTP)
- Cette configuration définit les dépendances entre les bibliothèques dynamiques
- Le premier paramètre est la bibliothèque dynamique qui dépend, suivie de la bibliothèque dynamique dont il dépend
module_dependency {
module1. so module2.so;
module3. so module2.so libjsoncpp.so;
} 3. Service (ne peut être configuré que dans le bloc HTTP)
- Services fournis par ce module de réglage de configuration
- Le premier paramètre est le nom de fichier de bibliothèque dynamique, suivi du nom du service prévu pour la bibliothèque dynamique (Case Sensitive)
- Le nom du service doit être mondialement unique
service {
module1. so srv_echo srv_datetime;
module2. so srv_sayHello;
module3. so srv_getSum;
} 4. Service_Mode (http, serveur, les blocs de localisation peuvent tous être configurés)
- Utilisé pour activer les fonctions du module, les pièces non activées ne seront pas traitées pour le service
- Non activé par défaut, l'exemple suivant est activé à l'échelle mondiale sur le serveur spécifié, mais la demande de routage pour
/test n'est pas traitée
http {
server {
sevice_mode on;
location /test {
service_mode off;
}
}
}Développement d'interface de service
- Les utilisateurs doivent inclure le fichier d'interface
ngx_http_service_interface.h dans le projet
// 接口形如下面的函数
#include "ngx_http_service_interface.h"
#include "cJSON.h"
void srv_sayHello ( const ngx_request_t * rqst , ngx_request_t * resp )
{
// do something...
}- Structure de demande / réponse
// 请求结构只包含一个 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 * );
};Règles d'appel de service
- La méthode de demande nécessite
POST - Spécifiez le service à appeler par la valeur du
Service-Name de l'en-tête HTTP -
Content-Type doit être de type json - Comme suit, appelez le service
srv_sayHello
curl -X POST " http://localhost/service_test "
-H ' Content-Type: application/json '
-H ' Service-Name: srv_sayHello '
-d ' {"data": "xxxx"} '