keeps name-to-service_address mapping at runtime More...
#include <registry.h>
Public Member Functions | |
void | configure (plugin::plugin_base_t &plugin) noexcept override |
main callback for plugin configuration when it's ready | |
virtual void | on_reg (message::registration_request_t &request) noexcept |
registers address on the service. Fails, if the name already exists | |
virtual void | on_dereg_service (message::deregistration_service_t &message) noexcept |
deregisters the name in the registry | |
virtual void | on_dereg (message::deregistration_notify_t &message) noexcept |
deregisters all names associated with the service address | |
virtual void | on_discovery (message::discovery_request_t &request) noexcept |
returns service address associated with the name or error | |
virtual void | on_promise (message::discovery_promise_t &request) noexcept |
notify the requestee when service name/address becomes available | |
virtual void | on_cancel (message::discovery_cancel_t ¬ify) noexcept |
cancels previously asked discovery promise | |
template<typename T > | |
auto & | access () noexcept |
generic non-public fields accessor | |
actor_base_t (config_t &cfg) | |
constructs actor and links it's supervisor | |
Public Member Functions inherited from rotor::actor_base_t | |
actor_base_t (config_t &cfg) | |
constructs actor and links it's supervisor | |
virtual void | do_initialize (system_context_t *ctx) noexcept |
early actor initialization (pre-initialization) | |
virtual void | do_shutdown (const extended_error_ptr_t &reason={}) noexcept |
convenient method to send actor's supervisor shutdown trigger message | |
virtual void | on_start () noexcept |
actor is fully initialized and it's supervisor has sent signal to start | |
template<typename M , typename... Args> | |
void | send (const address_ptr_t &addr, Args &&...args) |
sends message to the destination address | |
template<typename R , typename... Args> | |
request_builder_t< typename request_wrapper_t< R >::request_t > | request (const address_ptr_t &dest_addr, Args &&...args) |
returns request builder for destination address using the "main" actor address | |
template<typename R , typename... Args> | |
request_builder_t< typename request_wrapper_t< R >::request_t > | request_via (const address_ptr_t &dest_addr, const address_ptr_t &reply_addr, Args &&...args) |
returns request builder for destination address using the specified address for reply | |
template<typename Request , typename... Args> | |
void | reply_to (Request &message, Args &&...args) |
convenient method for constructing and sending response to a request | |
template<typename Request > | |
void | reply_with_error (Request &message, const extended_error_ptr_t &ec) |
convenient method for constructing and sending error response to a request | |
template<typename Request , typename... Args> | |
auto | make_response (Request &message, Args &&...args) |
makes response to the request, but does not send it. | |
template<typename Request > | |
auto | make_response (Request &message, const extended_error_ptr_t &ec) |
makes error response to the request, but does not send it. | |
template<typename Handler > | |
subscription_info_ptr_t | subscribe (Handler &&h, const address_ptr_t &addr) noexcept |
subscribes actor's handler to process messages on the specified address | |
template<typename Handler > | |
subscription_info_ptr_t | subscribe (Handler &&h) noexcept |
subscribes actor's handler to process messages on the actor's "main" address | |
template<typename Handler , typename = is_handler<Handler>> | |
void | unsubscribe (Handler &&h, address_ptr_t &addr) noexcept |
unsubscribes actor's handler from process messages on the specified address | |
template<typename Handler , typename = is_handler<Handler>> | |
void | unsubscribe (Handler &&h) noexcept |
unsubscribes actor's handler from processing messages on the actor's "main" address | |
void | unsubscribe (const handler_ptr_t &h) noexcept |
initiates handler unsubscription from the default actor address | |
void | activate_plugins () noexcept |
starts plugins activation | |
void | commit_plugin_activation (plugin::plugin_base_t &plugin, bool success) noexcept |
finishes plugin activation, successful or not | |
void | deactivate_plugins () noexcept |
starts plugins deactivation | |
void | commit_plugin_deactivation (plugin::plugin_base_t &plugin) noexcept |
finishes plugin deactivation | |
void | on_subscription (message::subscription_t &message) noexcept |
propagates subscription message to corresponding actors | |
void | on_unsubscription (message::unsubscription_t &message) noexcept |
propagates unsubscription message to corresponding actors | |
void | on_unsubscription_external (message::unsubscription_external_t &message) noexcept |
propagates external unsubscription message to corresponding actors | |
address_ptr_t | create_address () noexcept |
creates new unique address for an actor (via address_maker plugin) | |
virtual void | shutdown_start () noexcept |
starts shutdown procedure, e.g. upon receiving shutdown request | |
void | shutdown_continue () noexcept |
polls plugins for shutdown | |
virtual void | shutdown_finish () noexcept |
finalizes shutdown | |
virtual void | init_start () noexcept |
starts initialization procedure | |
void | init_continue () noexcept |
polls plugins whether they completed initialization. | |
virtual void | init_finish () noexcept |
finalizes initialization | |
template<typename T > | |
auto & | access () noexcept |
generic non-public fields accessor | |
template<typename T , typename... Args> | |
auto | access (Args... args) noexcept |
generic non-public methods accessor | |
template<typename T > | |
auto & | access () const noexcept |
generic non-public fields accessor | |
template<typename T , typename... Args> | |
auto | access (Args... args) const noexcept |
generic non-public methods accessor | |
const address_ptr_t & | get_address () const noexcept |
returns actor's main address | |
supervisor_t & | get_supervisor () const noexcept |
returns actor's supervisor | |
template<typename Delegate , typename Method , typename = std::enable_if_t<std::is_invocable_v<Method, Delegate *, request_id_t, bool>>> | |
request_id_t | start_timer (const pt::time_duration &interval, Delegate &delegate, Method method) noexcept |
spawns a new one-shot timer | |
void | cancel_timer (request_id_t request_id) noexcept |
cancels previously started timer | |
const extended_error_ptr_t & | get_shutdown_reason () const noexcept |
returns actor shutdown reason | |
const std::string & | get_identity () const noexcept |
retuns human-readable actor identity | |
virtual bool | should_restart () const noexcept |
whether spawner should create a new instance of the actor | |
template<typename Request , typename... Args> | |
request_builder_t< typename request_wrapper_t< Request >::request_t > | request (const address_ptr_t &dest_addr, Args &&...args) |
makes an request to the destination address with the message constructed from args | |
template<typename Request , typename... Args> | |
request_builder_t< typename request_wrapper_t< Request >::request_t > | request_via (const address_ptr_t &dest_addr, const address_ptr_t &reply_addr, Args &&...args) |
makes an request to the destination address with the message constructed from args | |
Protected Types | |
using | promise_ptr_t = intrusive_ptr_t< message::discovery_promise_t > |
intrusive pointer to discovery promise message (type) | |
using | promises_list_t = std::list< promise_ptr_t > |
list of intrusive pointers to discovery promise messages (type) | |
using | registered_map_t = std::unordered_map< std::string, address_ptr_t > |
name-to-address mapping type | |
using | registered_names_t = std::set< std::string > |
set of registered names type (for single address) | |
using | reverse_map_t = std::unordered_map< address_ptr_t, registered_names_t > |
service address to registered names mapping type | |
Protected Types inherited from rotor::actor_base_t | |
using | timers_map_t = std::unordered_map< request_id_t, timer_handler_ptr_t > |
timer-id to timer-handler map (type) | |
using | requests_t = std::unordered_set< request_id_t > |
list of ids of active requests (type) | |
Protected Attributes | |
registered_map_t | registered_map |
name-to-address mapping | |
reverse_map_t | reverse_map |
address-to-list_of_names mapping | |
promises_list_t | promises |
list of intrusive pointers to discovery promise messages | |
Protected Attributes inherited from rotor::actor_base_t | |
intrusive_ptr_t< message::init_request_t > | init_request |
suspended init request message | |
intrusive_ptr_t< message::shutdown_request_t > | shutdown_request |
suspended shutdown request message | |
address_ptr_t | address |
actor address | |
address_ptr_t | spawner_address |
actor spawner address | |
std::string | identity |
actor identity, which might have some meaning for developers | |
supervisor_t * | supervisor |
non-owning pointer to actor's execution / infrastructure context | |
plugin_storage_ptr_t | plugins_storage |
opaque plugins storage (owning) | |
plugins_t | plugins |
non-owning list of plugins | |
pt::time_duration | init_timeout |
timeout for actor initialization (used by supervisor) | |
pt::time_duration | shutdown_timeout |
timeout for actor shutdown (used by supervisor) | |
state_t | state |
current actor state | |
plugin::address_maker_plugin_t * | address_maker = nullptr |
non-owning pointer to address_maker plugin | |
plugin::lifetime_plugin_t * | lifetime = nullptr |
non-owning pointer to lifetime plugin | |
plugin::link_server_plugin_t * | link_server = nullptr |
non-owning pointer to link_server plugin | |
plugin::resources_plugin_t * | resources = nullptr |
non-owning pointer to resources plugin | |
std::set< const std::type_index * > | activating_plugins |
set of activating plugin identities | |
std::set< const std::type_index * > | deactivating_plugins |
set of deactivating plugin identities | |
timers_map_t | timers_map |
timer-id to timer-handler map | |
requests_t | active_requests |
list of ids of active requests | |
std::uint32_t | continuation_mask = 0 |
set of currently processing states, i.e. init or shutdown | |
extended_error_ptr_t | shutdown_reason |
explanation, why actor is been requested for shut down | |
Additional Inherited Members | |
Public Types inherited from rotor::actor_base_t | |
using | config_t = actor_config_t |
injects an alias for actor_config_t | |
template<typename Actor > | |
using | config_builder_t = actor_config_builder_t< Actor > |
injects templated actor_config_builder_t | |
template<typename Handler > | |
using | is_handler = std::enable_if_t< std::is_member_function_pointer_v< Handler >||std::is_base_of_v< handler_base_t, Handler > > |
SFINAE handler detector. | |
using | plugins_list_t = std::tuple< plugin::address_maker_plugin_t, plugin::lifetime_plugin_t, plugin::init_shutdown_plugin_t, plugin::link_server_plugin_t, plugin::link_client_plugin_t, plugin::registry_plugin_t, plugin::resources_plugin_t, plugin::starter_plugin_t > |
the default list of plugins for an actor | |
Static Public Attributes inherited from rotor::actor_base_t | |
static const constexpr std::uint32_t | PROGRESS_INIT = 1 << 0 |
flag to mark, that actor is already executing initialization | |
static const constexpr std::uint32_t | PROGRESS_SHUTDOWN = 1 << 1 |
flag to mark, that actor is already executing shutdown | |
static const constexpr std::uint32_t | ESCALATE_FALIURE = 1 << 2 |
flag to mark, that actor is already executing shutdown | |
static const constexpr std::uint32_t | AUTOSHUTDOWN_SUPERVISOR = 1 << 3 |
flag to mark, that actor trigger supervisor shutdown | |
Protected Member Functions inherited from rotor::actor_base_t | |
void | on_timer_trigger (request_id_t request_id, bool cancelled) noexcept |
triggers timer handler associated with the timer id | |
template<typename Delegate , typename Method > | |
void | start_timer (request_id_t request_id, const pt::time_duration &interval, Delegate &delegate, Method method) noexcept |
starts timer with pre-forged timer id (aka request-id | |
void | assign_shutdown_reason (extended_error_ptr_t reason) noexcept |
helper-method, which assigns shutdown reason if it isn't set | |
extended_error_ptr_t | make_error (const std::error_code &ec, const extended_error_ptr_t &next={}, const message_ptr_t &request={}) const noexcept |
makes extended error within the context of the actor | |
virtual bool | on_unlink (const address_ptr_t &server_addr) noexcept |
notification, when actor has been unlinked from server actor | |
plugin::plugin_base_t * | get_plugin (const std::type_index &) const noexcept |
finds plugin by plugin class identity | |
keeps name-to-service_address mapping at runtime
The class solves the following problem: one actor needs to know somehow the address of other actor. Instead of tightly couple them, i.e. manually binding addresses, it is possible to just take the registry everywhere and ask it (or register there) just on actor startup (initialization)
The "server-actor" must register it's address first. The name must be unique (in the scope of registry); the same address can be registered on different names, if need. It is good practice to unregister addresses when actor is going to be shutdown (it is done by plugin::registry_plugin_t
). It is possible to unregister single name, or all names associated with an address.
The discovery response returned to "client-actor" might contain error code if there is no address associated with the asked name.
The actor has syncronization facilities, i.e. it is possible to ask the actor to notify when some name has been registered (discovery promise/future).
rotor::actor_base_t::actor_base_t | ( | config_t & | cfg | ) |
constructs actor and links it's supervisor
An actor cannot outlive it's supervisor.
Sets internal actor state to NEW
|
overridevirtualnoexcept |
main callback for plugin configuration when it's ready
Reimplemented from rotor::actor_base_t.