Библиотека Ticketing для C/C++
GitHubПока не зарегистрирован в официальном реестре vcpkg — требования к включению строгие, регистрация ещё продолжается. Пока что склонируйте репозиторий Github выше и соберите его самостоятельно.
Репозиторий
Пример
Базовый пример
Создайте один broker при запуске приложения и используйте совместно. wait=0 — одна немедленная попытка без queue, максимум 255 с; lease — 1–250 с. Последний minimum-work budget обязателен и может быть нулём. Доли секунды округляются вверх; значения вне диапазона и budget больше нормализованной lease отклоняются до отправки, без clamp.
#include <ticketing/ticketing.h>
const char *addrs[] = {"127.0.0.1:5225"};
ticketing_broker *broker = ticketing_connect(addrs, 1);
ticketing_wait_ready(broker, 5);
ticketing_ticket *ticket = NULL;
if (ticketing_acquire(broker, "key", 5.0, 30.0, 2.0, &ticket) == TICKETING_OK) {
uint64_t token = ticketing_ticket_token(ticket);
/* In the same DB transaction: verify/update token high-water and perform the business write. */
ticketing_release(ticket, NULL);
}Автоматический close/drop — ограниченный best-effort release. Если важен результат, используйте явный release API. Token обязан fence защищённый DB write в той же transaction.
Полезно знать (поведение)
- Если мог быть отправлен хотя бы один request byte, потеря окончательного ответа даёт Indeterminate.
Aне отправляется автоматически с тем же owner; caller не входит в critical section. - Cancel до send — unsent; после possible-send закрывает session. Если grant token параллельно распознан, выполняется ограниченный компенсационный exact-token release.
M, каждыйEи malformed/oversized/unknown response — session-fatal. Неопределённые possible-send acquire становятся Indeterminate.B— окончательный capacity reject и возвращается сразу. Внутреннего retry нет; caller может после application backoff начать новый acquire с новым owner.- Явный/компенсационный release повторяет exact token только абсолютные 5 секунд от call/enqueue.
Rуспех,Nотсутствует/не текущий; нет окончательного ответа — ошибка, не предполагаемый успех. - Ticket выдаётся лишь при положительном консервативном остатке времени, достаточном для work budget. Работа свыше 250 с unsupported до отправки.
- DB fencing по token обязателен: в той же transaction отклонить
token <= stored_high_water, обновить high-water и выполнить business write до commit/rollback и release.
Параметры безопасности (токен · TLS)
Все опции необязательны. token должен совпадать с client_tokens сервера, а TLS имеет четыре режима: выкл / системное хранилище доверия / указанный CA / пропуск проверки (только для тестов).
const char *addrs[] = {"10.0.0.1:5225", "10.0.0.2:5225", "10.0.0.3:5225"};
ticketing_options options = {
.token = "123",
.tls = "system-roots", /* NULL(off) | "insecure-skip-verify" | путь к файлу CA */
};
ticketing_result error;
ticketing_broker *broker = ticketing_connect_with(addrs, 3, &options, &error);Настроить токен, TLS и конфигурацию кластера на стороне сервера можно на странице Развёртывание сервера Ticketing.