Nginx -Dienstverarbeitungsmodul
Voraussetzungen
- Linux -Plattform
- Die Nginx -Version ist nicht niedriger als
1.9.11 - Installierte Tools für die Nginx -Kompilierung
Modulfunktionen
- Serviceanfragen/Antwortnachrichten sind alle im
json -Format. Die cJSON -Bibliothek wird standardmäßig kompiliert. Business -Entwickler können es verwenden, um Pakete zu analysieren, und können natürlich auch andere json -Parsing -Bibliotheken verwenden (siehe example/third_test ) - Durch die Implementierung einer bestimmten Schnittstelle kompilieren Sie den Dienst in eine dynamische Bibliothek und laden Sie sie in Nginx laden
Vorteil
- Eine hohe Leistung unter Verwendung des Multi-Process-Modells von NGINX zur Verarbeitung von Geschäftsgeschäften und Geschäftsentwickler kann auch Multi-Threading in der implementierten Schnittstelle entsprechend spezifischen Szenarien verwenden, um die Leistung weiter zu verbessern, und können auch horizontal durch Lastausgleich skalieren.
- Stark , wenn der Service abstürzt, startet NginX den Arbeitsprozess, um sicherzustellen, dass das Unternehmen nicht die Verarbeitung beendet
- Service reibungsloser Neustart/Upgrade . Mit Hilfe der reibungslosen Neustart-/Upgrade -Funktion von NGINX kann der Service -Neustart/Upgrade elegant Neustart/Upgrade sein.
Bauen
1. Laden Sie den Nginx -Quellcode herunter
# 这里以 nginx-1.24.0 为例, 也可以根据自己情况下载其他版本的 nginx 源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz
2. Dekomprimieren und geben Sie das NGINX -Quellcode -Verzeichnis ein und geben Sie ein
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
3. Ziehen Sie den Code dieses Projekts ab
# 这里拉取到 nginx 源码的目录下, 也可以根据情况拉取到其他目录
git clone https://github.com/xukeawsl/ngx_http_service_module.git
4. Fügen Sie das Modul zu nginx hinzu und installieren Sie es
# 如果你将项目代码放在其他路径, 则需要修改这里的模块路径
./configure --add-module=ngx_http_service_module
make
make install
Konfigurationsbefehle
1. Module_Path (kann nur im HTTP -Block konfiguriert werden)
- Dieser Befehl konfiguriert den Pfad, zu dem die dynamische Bibliothek gehört. Wenn es nicht konfiguriert ist, installieren Sie die Standard -Suchpfad -Suche
- Der erste Parameter ist der Pfad, gefolgt vom Namen der dynamischen Bibliotheksdatei (Vollname)
module_path {
/ path/to /dir1 module1.so;
/ path/to /dir2 module2.so module3.so;
} 2. Module_Dependency (kann nur im HTTP -Block konfiguriert werden)
- Diese Konfiguration legt die Abhängigkeiten zwischen dynamischen Bibliotheken fest
- Der erste Parameter ist die dynamische Bibliothek, die abhängig ist, gefolgt von der dynamischen Bibliothek, von der sie abhängt
module_dependency {
module1. so module2.so;
module3. so module2.so libjsoncpp.so;
} 3. Service (kann nur im HTTP -Block konfiguriert werden)
- Services, die durch dieses Konfigurationseinstellungsmodul bereitgestellt werden
- Der erste Parameter ist der Name der dynamischen Bibliotheksdatei, gefolgt vom Dienstnamen für die dynamische Bibliothek (Fallempfindlichkeit)
- Der Service Name muss weltweit einzigartig sein
service {
module1. so srv_echo srv_datetime;
module2. so srv_sayHello;
module3. so srv_getSum;
} 4. Service_Mode (HTTP, Server, Standortblöcke können alle konfiguriert werden)
- Wird verwendet, um Modulfunktionen zu aktivieren, werden die nicht übereinstimmenden Teile nicht für den Service verarbeitet
- Das folgende Beispiel ist nicht standardmäßig aktiviert, das folgende Beispiel ist auf dem angegebenen Server global aktiviert, aber die Routing -Anforderung für
/test wird nicht verarbeitet
http {
server {
sevice_mode on;
location /test {
service_mode off;
}
}
}Entwicklung der Serviceschnittstelle
- Benutzer müssen die Schnittstellendatei
ngx_http_service_interface.h in das Projekt aufnehmen
// 接口形如下面的函数
#include "ngx_http_service_interface.h"
#include "cJSON.h"
void srv_sayHello ( const ngx_request_t * rqst , ngx_request_t * resp )
{
// do something...
} // 请求结构只包含一个 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 * );
};Service -Anrufregeln
- Die Anforderungsmethode erfordert
POST - Geben Sie den Dienst an, der nach dem Wert des HTTP-Header
Service-Name aufgerufen wird -
Content-Type muss vom Typ json sein - Rufen Sie wie folgt den Service
srv_sayHello an
curl -X POST " http://localhost/service_test "
-H ' Content-Type: application/json '
-H ' Service-Name: srv_sayHello '
-d ' {"data": "xxxx"} '