vulcain-corejs
Version:
Vulcain micro-service framework
46 lines (44 loc) • 1.71 kB
JavaScript
;
const guid = require('uuid');
const annotations_1 = require("../di/annotations");
const RX = require("rx");
const system_1 = require("../configurations/globals/system");
class MessageBus {
constructor(manager, hasAsyncActions) {
this.manager = manager;
this._events = new Map();
this.commandBus = manager.container.get(annotations_1.DefaultServiceNames.ActionBusAdapter);
if (this.commandBus && hasAsyncActions) {
this.commandBus.consumeTask(manager.domain.name, manager.serviceId, manager.consumeTaskAsync.bind(manager));
}
this.eventBus = manager.container.get(annotations_1.DefaultServiceNames.EventBusAdapter);
}
getEventsQueue(domain) {
let events = this._events.get(domain);
if (!events) {
events = new RX.Subject();
this._events.set(domain, events);
this.eventBus.consumeEvents(domain, this.consumeEventAsync.bind(this));
}
return events;
}
consumeEventAsync(event) {
try {
this.getEventsQueue(event.domain).onNext(event);
}
catch (e) {
system_1.System.log.error(null, e, `Consume event action: ${event.action} ${event.schema ? "schema: " + event.schema : ""} tenant: ${event.tenant}`);
}
}
pushTask(command) {
command.status = "Pending";
command.taskId = guid.v4();
this.commandBus.publishTask(command.domain, this.manager.serviceId, command);
}
sendEvent(response) {
delete response.inputSchema;
this.eventBus.sendEvent(response.domain, response);
}
}
exports.MessageBus = MessageBus;
//# sourceMappingURL=messageBus.js.map