欢迎加入QQ群:221779856,国内最活跃的Mosquitto沟通社区,关于MQTT、Mosquitto、IM、推送系统、物联网、高并发处理等技术。
Mosquitto的动态加载配置文件目前只有支持SIGHUP信号的linux系统支持(可使用Kill命令发送);
其内部实现原理如下:
在源代文件src/mosquitto.c代码里,自定义了针对SIGHUP信号的处理函数handle_sighup:
#ifdef SIGHUP
/* Signal handler for SIGHUP - flag a config reload. */
void handle_sighup(int signal)
{
flag_reload = true;
}
#endif
并在该文件(src/mosquitto.c)中设置了SIGHUP信号和处理函数handle_sighup的映射关系:
#ifdef SIGHUP
signal(SIGHUP, handle_sighup);
#endif
在loop.c文件中,重新加载配置文件,其代码如下:
if(flag_reload){
_mosquitto_log_printf(NULL, MOSQ_LOG_INFO, "Reloading config.");
mqtt3_config_read(db->config, true);
mosquitto_security_cleanup(db, true);
mosquitto_security_init(db, true);
mosquitto_security_apply(db);
mqtt3_log_close(db->config);
mqtt3_log_init(db->config);
flag_reload = false;
}