SObjectizer-5.5.21 и so_5_extra-1.0.4
2018.02.08
SObjectizer обновился до версии 5.5.21. Эта версия содержит несколько важных добавлений/изменений, полный список которых приведен в соответствующем разделе Wiki.
Наиболее важное нововведение версии 5.5.21 - это возможность подписки т.н. deadletter handler-ов. Deadletter handler получает сообщение, если для агента больше не нашлось других обработчиков для этого сообщения. При этом deadletter handler вызывается вне зависимости от того, в каком состоянии находится агент. Это позволяет использовать deadletter handler-ы для реализации обработчиков сообщений по умолчанию. Более подробная информация может быть найдена в этом разделе Wiki: [so-5.5.21 Deadletter Handlers].
Так же обновился сопутствующий продукт so_5_extra, который базируется на SObjectizer-е.
Версия 1.0.4 so_5_extra вводит понятие асинхронной операции: [so5extra 1.0 Async Operations]. Асинхронные операции предназначены для того, чтобы существенно сократить количество кода, который нужно написать для реализации однократного взаимодействия между агентами. Например, с помощью асинхронных операций разработчик может написать что-то вроде:
class request_manager : public so_5::agent_t { struct request_timed_out { user_id user_; request_id id_; }; ... void on_successful_result(mhood_t<request_successed> cmd) {...} void on_failed_result(mhood_t<request_failed> cmd) {...} void on_timeout(mhood_t<request_timed_out> cmd) {...} ... void on_new_request(mhood_t<request_data> cmd) { // Detect who will process the request. const auto processor_mbox = detect_processor_for_req(*cmd); // Prepare async operation of handling the request. so_5::extra::async_op::time_limited::make<request_timed_out>(*this) .completed_on(processor_mbox, so_default_state(), &request_manager::on_successful_result) .completed_on(processor_mbox, so_default_state(), &request_manager::on_failed_result) .timeout_handler(so_default_state(), &request_manager::on_timeout) .activate(5s, cmd->user_, cmd->id_); // Transfer request processing to actual processor. so_5::send(processor_mbox, cmd); } ... };
Фокус здесь в том, что все подписки для обработчиков завершения операции и истечения тайм-аута создаются и уничтожаются автоматически. Также автоматически выполняется отсылка и отмена отложенного сообщения/сигнала для отсчета тайм-аута.
SObjectizer-5.5.21 может быть загружен из секции Files на SourceForge или же может быть взят из Subversion-репозитория или из зеркала на GitHub.
Последняя версия SObjectizer-а
также может быть установлена посредством менеджера пакетов vcpkg
командой:
vcpkg install sobjectizer.
Исходные тексты so_5_extra могут быть получены из Subversion-репозитория или могут быть загружены из секции Files на SourceForge.