文章目录
- 简介
- Features
- Quickstart
- Example
- Web UI
- 命令行
- 参考
简介
cppq 是一个简单、可靠、高效的 C++17 分布式任务队列。
cppq 是一个 C++ 库,用于对任务进行排队并与工作线程异步处理它们。它由 Redis 支持,旨在可扩展且易于入门。
cppq 工作原理:
- 客户端将任务放入队列(队列由redis管理)
- 服务器从队列中取出任务并为每个任务启动一个线程
- 任务由多个worker同时处理
任务队列用作跨多台机器分配工作的机制。一个系统可以由多个工作服务器和代理组成,从而实现高可用性和水平扩展。
Features
Suppoeted:
- 保证任务至少执行一次
- 重试失败的任务
- Worker崩溃时自动恢复任务
- 由于 Redis 中的写入速度很快,因此添加任务的延迟较低
- 队列优先级
- 任务安排
- 任务调度
- 能够暂停队列以停止处理队列中的任务
- 用于检查和控制队列和任务的 Web UI
- 用于检查和控制队列和任务的 CLI
No supported:
- 周期性任务
Quickstart
cppq 是一个仅包含头文件的库,具有 2 个依赖项:libuuid 和hiredis。
只需包含头文件: 只需包含头文件:#include “cppq.h”,并在构建时添加以下标志 -luuid -lhiredis
wsl2 ubuntu需要安装hiredis和redis:
- hiredis需要从github中下载,不要使用ubuntu自带的,太老了,编译报错
CMakeLists.txt
cmake_minimum_required(VERSION 3.16)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)include_directories(${CMAKE_SOURCE_DIR}/deps/include)
link_directories(${CMAKE_SOURCE_DIR}/deps/lib)project(distributedTasks LANGUAGES CXX)add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/example.cpp)target_link_libraries(${PROJECT_NAME}PRIVATE uuidPRIVATE hiredisPRIVATE pthread)target_include_directories(${PROJECT_NAME}PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
Example
见cvpp的example.cpp
Web UI
cd web && ./start.sh
命令行
cd cli && pip3 install -r requirements && python3 main.py
usage: main.py [-h] [--redis_uri REDIS_URI] [--queues] [--stats QUEUE] [--list QUEUE STATE] [--task QUEUE UUID] [--pause QUEUE] [--unpause QUEUE]cppq CLIoptions:-h, --help show this help message and exit--redis_uri REDIS_URI--queues print queues, priorities, and pause status--stats QUEUE print queue statistics--list QUEUE STATE list task UUIDs in queue--task QUEUE UUID get task details--pause QUEUE pause a queue--unpause QUEUE unpause a queue
参考
- cvpp