- 新增 ConfsTask(ITask,与 HttpTask 同构):ConfigStore + INI/JSON 取值 + get/list/reload/health 四路由,协议与 Python confs 逐字节兼容 - 新增 ConfsLogC 异步日志客户端(沿用 confs2 LogC,服务名 confs) - main.cpp 新增 --confs <port> 选项与 CONFS_* 环境变量;不传则行为不变 - Makefile 链接 -lus_msg,版本 0.0.4 → 0.1.0 - _run.sh 启用 --confs 8010;_set.sh 自建 configs → ../confs/configs 链接 - init.txt 移除 confs2 自启动行(由 core 内嵌承担) - 黑盒对比测试 16/16 通过(tests/blackbox/test_core_confs.py)
64 lines
2.1 KiB
C++
64 lines
2.1 KiB
C++
#pragma once
|
||
#include <memory>
|
||
#include <string>
|
||
#include <chrono>
|
||
#include <us/Thread.hpp>
|
||
#include <us/ITask.hpp>
|
||
#include <us/RpcServer.hpp>
|
||
|
||
namespace qing {
|
||
|
||
/* 配置仓库前置声明(实现位于 ConfsTask.cpp,保持头文件干净) */
|
||
class ConfigStore;
|
||
|
||
/* ----------------
|
||
* 【内嵌 confs 配置服务任务】
|
||
* ----------------
|
||
* 将 confs2(C++20 统一配置服务,pymsg RpcServer)内嵌为 core 的一个 ITask,
|
||
* 与 HttpTask / Tttask 并列,由 taskPool 统一管理生命周期。
|
||
*
|
||
* - 协议与 Python confs / standalone confs2 字节级兼容,消费方零改动
|
||
* - 仅监听 127.0.0.1,路由 get/list/reload/health 不变
|
||
* - 不传 --confs 参数时 core 不加载本任务,行为与原版完全一致
|
||
*/
|
||
class ConfsTask: public ITask {
|
||
public:
|
||
|
||
/* 构造内嵌配置服务任务
|
||
*
|
||
* addr: 监听地址(默认 127.0.0.1)
|
||
* port: 监听端口(默认 8010)
|
||
* workers: RpcServer 工作线程数(默认 4)
|
||
* config_dir: 配置文件目录(默认 ./configs) */
|
||
ConfsTask(std::string addr, int port, int workers, std::string config_dir);
|
||
|
||
/* 析构需定义于 .cpp(unique_ptr 持有不完整类型 ConfigStore) */
|
||
~ConfsTask();
|
||
|
||
/* 任务是否在运行中 */
|
||
bool isRunning() override;
|
||
|
||
/* 启动任务(激活线程并等待 RpcServer 就绪) */
|
||
void start() override;
|
||
|
||
/* 终止任务(停止 RpcServer 并等待线程关闭) */
|
||
void stop() override;
|
||
|
||
private:
|
||
std::string addr; /* 监听地址 */
|
||
int port; /* 监听端口 */
|
||
int workers; /* 工作线程数 */
|
||
std::unique_ptr<ConfigStore> store; /* 配置仓库 */
|
||
std::unique_ptr<Thread> th; /* 可控线程指针 */
|
||
std::unique_ptr<pmc::net::RpcServer> server; /* RPC 服务器指针 */
|
||
std::chrono::steady_clock::time_point started_at; /* 启动时间(health uptime) */
|
||
|
||
/* 初始化线程,定义线程的行为(RpcServer) */
|
||
void init_thread();
|
||
|
||
/* 注册 pymsg 路由(get/list/reload/health) */
|
||
void register_routes(pmc::net::RpcServer& rpc);
|
||
};
|
||
|
||
}
|