dubbojs-client
Version:
dubbo service client
45 lines (37 loc) • 1.08 kB
JavaScript
const Base = require('sdk-base');
const assert = require('assert');
class ProviderManager extends Base {
constructor(options) {
assert(options && options.providerClass, '[dubbo-client] options.providerClass is required');
super(options);
this.providers = new Map(); // hostname => provider
this.ready(true);
}
get providerClass() {
return this.options.providerClass;
}
set providerClass(val) {
this.options.providerClass = val;
}
* getProvider(options) {
const address = options.address;
const key = address.host;
let provider = this.providers.get(key);
if (provider) {
return provider;
}
provider = new this.providerClass(options);
yield provider.ready();
provider.on('error', err => { this.emit('error', err); });
provider.on('close', () => { this.providers.delete(key); });
this.providers.set(key, provider);
return provider;
}
close() {
for (const provider of this.providers.values()) {
provider.close();
}
}
}
module.exports = ProviderManager;
;