moleculer
Version:
Fast & powerful microservices framework for Node.JS
87 lines (75 loc) • 1.79 kB
JavaScript
/*
* moleculer
* Copyright (c) 2023 MoleculerJS (https://github.com/moleculerjs/moleculer)
* MIT Licensed
*/
"use strict";
const BaseDiscoverer = require("./base");
/**
* Import types
*
* @typedef {import("./local")} LocalDiscovererClass
* @typedef {import("./local").LocalDiscovererOptions} LocalDiscovererOptions
* @typedef {import("../node")} Node
*/
/**
* Local (built-in) Discoverer class
*
* @class Discoverer
* @implements {LocalDiscovererClass}
*/
class LocalDiscoverer extends BaseDiscoverer {
/**
* Creates an instance of Discoverer.
*
* @param {LocalDiscovererOptions?} opts
* @memberof LocalDiscoverer
*/
constructor(opts) {
super(opts);
}
/**
* Initialize Discoverer
*
* @param {any} registry
*
* @memberof LocalDiscoverer
*/
init(registry) {
super.init(registry);
}
/**
* Discover a new or old node.
*
* @param {String} nodeID
* @returns {Promise<Node | void>}
*/
discoverNode(nodeID) {
if (!this.transit) return this.Promise.resolve();
return this.transit.discoverNode(nodeID);
}
/**
* Discover all nodes (after connected)
* @returns {Promise<Node[] | void>}
*/
discoverAllNodes() {
if (!this.transit) return this.Promise.resolve();
return this.transit.discoverNodes();
}
/**
* Local service registry has been changed. We should notify remote nodes.
*
* @param {String=} nodeID
* @returns {Promise<void>}
*/
sendLocalNodeInfo(nodeID) {
if (!this.transit) return this.Promise.resolve();
const info = this.broker.getLocalNodeInfo();
const p =
!nodeID && this.broker.options.disableBalancer
? this.transit.tx.makeBalancedSubscriptions()
: this.Promise.resolve();
return p.then(() => this.transit.sendNodeInfo(info, nodeID));
}
}
module.exports = LocalDiscoverer;