Módulo de processamento de serviço nginx
Pré -requisitos
- Plataforma Linux
- A versão nginx não é inferior a
1.9.11 - Ferramentas instaladas para compilação Nginx
Recursos do módulo
- Solicitação de serviço/mensagens de resposta estão todas no formato
json . A biblioteca cJSON é compilada por padrão. Os desenvolvedores de negócios podem usá -lo em pacotes de análise/pacotes e, é claro, eles também podem usar outras bibliotecas de análise json (consulte a seção example/third_test ) - Ao implementar uma interface específica, compile o serviço em uma biblioteca dinâmica e carregue -a em nginx
vantagem
- Alto desempenho , usando o modelo de vários processos da NGINX para processar negócios, e os desenvolvedores de negócios também podem usar multi-threading na interface implementada de acordo com cenários específicos para melhorar ainda mais o desempenho e também podem escalar horizontalmente através do balanceamento de carga.
- Forte , quando o serviço falhar, o Nginx reiniciará o processo de trabalho para garantir que o negócio não pare de processar
- Serviço Smooth reinicie/atualização . Com a ajuda da função de reinicialização/atualização suave do Nginx, o serviço Reiniciar/Upgrade pode ser elegantemente reiniciado/atualização.
Construir
1. Faça o download do código -fonte nginx
# 这里以 nginx-1.24.0 为例, 也可以根据自己情况下载其他版本的 nginx 源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz
2. Descomprimir e entrar no diretório de código -fonte NGINX
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
3. Puxe o código deste projeto
# 这里拉取到 nginx 源码的目录下, 也可以根据情况拉取到其他目录
git clone https://github.com/xukeawsl/ngx_http_service_module.git
4. Adicione o módulo para nginx e instale -o
# 如果你将项目代码放在其他路径, 则需要修改这里的模块路径
./configure --add-module=ngx_http_service_module
make
make install
Comandos de configuração
1. Module_Path (só pode ser configurado no bloco HTTP)
- Este comando configura o caminho ao qual a biblioteca dinâmica pertence. Se não estiver configurado, instale a pesquisa de caminho de pesquisa padrão
- O primeiro parâmetro é o caminho, seguido pelo nome do arquivo dinâmico da biblioteca (nome completo)
module_path {
/ path/to /dir1 module1.so;
/ path/to /dir2 module2.so module3.so;
} 2. Module_dependency (só pode ser configurado no bloco HTTP)
- Esta configuração define as dependências entre bibliotecas dinâmicas
- O primeiro parâmetro é a biblioteca dinâmica que depende, seguida pela biblioteca dinâmica depende
module_dependency {
module1. so module2.so;
module3. so module2.so libjsoncpp.so;
} 3. Serviço (só pode ser configurado no bloco HTTP)
- Serviços fornecidos por este módulo de configuração de configuração
- O primeiro parâmetro é o nome do arquivo da biblioteca dinâmica, seguida pelo nome do serviço fornecido para a biblioteca dinâmica (sensível ao caso)
- O nome do serviço precisa ser globalmente único
service {
module1. so srv_echo srv_datetime;
module2. so srv_sayHello;
module3. so srv_getSum;
} 4. Service_mode (http, servidor, blocos de localização podem ser configurados)
- Usados para ativar as funções do módulo, as peças não inabledes não serão processadas para serviço
- Não ativado por padrão, o exemplo a seguir é ativado globalmente no servidor especificado, mas a solicitação de roteamento para
/test não é processada
http {
server {
sevice_mode on;
location /test {
service_mode off;
}
}
}Desenvolvimento da interface de serviço
- Os usuários precisam incluir o arquivo de interface
ngx_http_service_interface.h no projeto
// 接口形如下面的函数
#include "ngx_http_service_interface.h"
#include "cJSON.h"
void srv_sayHello ( const ngx_request_t * rqst , ngx_request_t * resp )
{
// do something...
}- Estrutura de solicitação/resposta
// 请求结构只包含一个 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 * );
};Regras de chamada de serviço
- O método de solicitação requer
POST - Especifique o serviço a ser chamado pelo valor do
Service-Name cabeçalho HTTP -
Content-Type deve ser do tipo json - Da seguinte forma, ligue para o serviço
srv_sayHello
curl -X POST " http://localhost/service_test "
-H ' Content-Type: application/json '
-H ' Service-Name: srv_sayHello '
-d ' {"data": "xxxx"} '