2021-08-30 04:40:28 +00:00
/ * *
2022-01-19 17:38:43 +00:00
* @module dispatcher
2021-08-30 04:40:28 +00:00
* @author Martin Karkowski
* @email m . karkowski @zema . de
2022-01-19 17:38:43 +00:00
* # NoPE - Dispatcher
*
* The NoPE - Dispatcher is designed as Layer between the different Modules / Dispatchers . They allow distributed computing or just a simple * * * Service oriented Architecture * * * ( * SOA * ) . A dispatcher is used to link the module s , share data and events and provide a remote procedure call ( rpc ) interface .
*
* # # Building Blocks of a Dispatcher :
*
* | element | description |
* | - | - |
* | ` connectivityManager ` : { @link connectivityManager } | establishes a connection to other dispatchers and manages the status of the remotely connected dispatchers . It checks their health and removes dead dispatchers . |
* | ` eventDistributor ` : { @link PubSubSystem } | shares events accross the network ( or internally ) . You can use this element to listen for specific events . The subscription to those events allows ` mqtt ` - patterns . Additionaly , you are allowed to emit event on specific topics , or pattern based topics |
* | ` dataDistributor ` : { @link DataPubSubSystem } | shares data accross the network ( or internally ) . In comperisson to events , data is persistent and is available all the time . You can use this sub - module to listen for specific data - changes ( install data - hooks ) , pull specific data or push data . You can pull / push data using a ` mqtt ` - pattern based path . |
* | ` rpcManager ` : { @link rpcManager } | Used to perform ` remote procedure calls ` ( see [ here ] ( https : //de.wikipedia.org/wiki/Remote_Procedure_Call)). The manager keeps track of the available services. You must use the sub-module to register/unregister (new) services. |
* | ` instanceManager ` : { @link instanceManager } | Used to create / dispose ( remote ) instances . The manager keeps track of the available instances in the network , allows to create ` wrappers ` for those instances . You must use the sub - module to register / unregister ( new ) instances . To allow the system to provide a service for creating instances of as specific type , you can provide a generator and provide it as ` service ` . |
*
* # # Create a Dispatcher
*
* To start exploring the capabilities of the dispatcher we will firstly create a dispatcher with the code below :
*
*
* ` ` ` javascript
* // First lets install nope using npm
* const nope = require ( "../dist-nodejs/index.nodejs" )
*
* // Lets create our dispatcher
* const dispatcher = nope . dispatcher . getDispatcher ( {
* // We will use the event layer (which just runs internally)
* communicator : nope.getLayer ( "event" ) ,
*
* // We will adapt the timings (normally, we send a hartbeat and check for dead dispatchers)
* timings : {
*
* // Interval for the alive message given in [ms]. If "0" is provided,
* // no alive messages are provided
* sendAliveInterval : 0 ,
*
* // Interval, to check the other dispatcher for being slow, dead, etc..
* // should be lager then the "sendAliveInterval". The value is given in [ms]
* // If "0" is provided, no alive messages are provided
* checkInterval : 0
*
* }
* } ) ;
* ` ` `
*
* # # Settings for creating :
*
* The relevant Settings are described by the { @link INopeDispatcherOptions } . This options allows to define :
* * the communication bridge . ( use ` getLayer ` to receive a bridge with the specified layer )
* * define a specific ` id `
* * provide a logger ( otherwise the dispatcher wont log anything )
* * define the timings for ` heartbeats ` and ` checks ` ( see { @link INopeINopeConnectivityTimeOptions } for more details )
* * a ` defaultSelector ` which is used as selector for a service provide
*
* # # Playing with the dispatcher :
*
* To play with a dispatcher , you can use the ` nope-js ` repl tool . this tool creates a ` dispatcher ` and you are able to interact with the dispatcher in an interactive console .
*
*
2021-08-30 04:40:28 +00:00
* /
2022-01-19 17:38:43 +00:00
import * as baseServices from "./baseServices" ;
import * as connectivityManager from "./ConnectivityManager" ;
import * as instanceManager from "./InstanceManager" ;
import * as rpcManager from "./RpcManager" ;
2021-08-30 04:40:28 +00:00
export {
2022-10-29 05:52:14 +00:00
exportAsNopeService ,
IexportAsNopeServiceParameters ,
2022-01-10 06:52:05 +00:00
nopeEmitter ,
nopeMethod ,
2022-01-19 17:38:43 +00:00
nopeProperty ,
2021-08-30 04:40:28 +00:00
} from "../decorators/index" ;
2021-09-04 11:45:52 +00:00
export * from "../types/nope/nopeDispatcher.interface" ;
2021-08-30 04:40:28 +00:00
export { getDispatcher } from "./getDispatcher" ;
export { getLinkedDispatcher } from "./getLinkedDispatcher" ;
2022-01-19 17:38:43 +00:00
export { baseServices , connectivityManager , instanceManager , rpcManager } ;