Built-in Registry
The Moleculer has a built-in service registry module. It stores all information about services, event listeners and nodes. When you call a service or emit an event, broker asks the registry to look up a node which executes the given service.
You can access the stored data via internal service.
If a service has multiple running instances, Registry uses strategies to select a node from all available nodes. There are some built-in strategies, or you can create your custom strategies too.
Built-in strategies
ServiceBroker can resolve the strategy
from a string or set a BaseStrategy
class to the strategy
property.
let broker = new ServiceBroker({ |
RoundRobin strategy
This strategy selects a node based on RoundRobin algorithm.
Usage
let broker = new ServiceBroker({ |
Random strategy
This strategy selects a node randomly.
Usage
let broker = new ServiceBroker({ |
CPU usage-based strategy
This strategy selects a node which has the lowest CPU usage. Due to the node list can be very long, it gets samples and selects the node with the lowest CPU usage from only samples instead of the whole node list.
Usage
let broker = new ServiceBroker({ |
Strategy options
Name | Type | Default | Description |
---|---|---|---|
sampleCount |
Number |
3 |
the number of samples. |
lowCpuUsage |
Number |
10 |
the low CPU usage percent (%). The node which has lower CPU usage than this value is selected immediately. |
Usage with custom options
let broker = new ServiceBroker({ |
Latency-based strategy
This strategy selects a node which has the lowest latency, measured by periodic PING
. Notice that the strategy only ping one of nodes from a single host. Due to the node list can be very long, it gets samples and selects the host with the lowest latency from only samples instead of the whole node list.
Usage
let broker = new ServiceBroker({ |
Strategy options
Name | Type | Default | Description |
---|---|---|---|
sampleCount |
Number |
5 |
the number of samples. If you have a lot of hosts/nodes, it’s recommended to increase the value. |
lowLatency |
Number |
10 |
the low latency (ms). The node which has lower latency than this value is selected immediately. |
collectCount |
Number |
5 |
the number of measured latency per host to keep in order to calculate the average latency. |
pingInterval |
Number |
10 |
ping interval (s). If you have a lot of host/nodes, it’s recommended to increase the value. |
Usage with custom options
let broker = new ServiceBroker({ |