UNPKG

@methodus/server

Version:
111 lines 6.12 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const debug = require('debug')('tmla:methodus:mq'); require("reflect-metadata"); const fp_1 = require("../../fp"); const _1 = require("./"); const log_1 = require("../../log"); const config_1 = require("../../config"); const domain = require("domain"); const metadataKey = 'methodus'; let MQRouter = class MQRouter { constructor(classType, connectionOptions) { this.options = connectionOptions; let proto = fp_1.fp.maybeProto(classType); // let methodinformation: MethodusClassConfig = config.classes.get(methodus.name); let existingClassMetadata = Reflect.getOwnMetadata(metadataKey, proto) || {}; //if (methodinformation.methodType !== MethodType.Local) existingClassMetadata.returnMessages = true; Reflect.defineMetadata(metadataKey, existingClassMetadata, proto); _1.registerHandlers(proto, this.options); _1.registerWorkers(proto, this.options); } registerRoutes(proto, methodus) { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { var dom = domain.create(); dom.on('error', () => { this.registerRoutes(proto, methodus); }); dom.run(() => { _1.AMQP.connect(this.options).then((conn) => { conn.on('error', (error) => { console.log(error); this.registerRoutes(proto, methodus); }); conn.on('close', (error) => { console.log(error); this.registerRoutes(proto, methodus); }); dom.add(conn); conn.createChannel().then((ch) => { let q = methodus.name; ch.assertQueue(q, { durable: false }).then((q) => { // ch.assertQueue(q, { durable: false }); ch.prefetch(1); ch.consume(q.queue, (msg) => __awaiter(this, void 0, void 0, function* () { if (msg && msg.content) { //parse message try { let parsedMessage = fp_1.fp.maybeJson(msg.content.toString()); if (proto[parsedMessage.to]) { let result = yield proto[parsedMessage.to](...parsedMessage.args); if (msg.properties) { ch.sendToQueue(msg.properties.replyTo, new Buffer(JSON.stringify(result)), { correlationId: msg.properties.correlationId }); ch.ack(msg); } } else { log_1.logger.error(this, `method ${parsedMessage.to} not found in ${proto}`); } } catch (error) { console.error(error); } } else { log_1.logger.error(this, `recieved empty message`); this.registerRoutes(proto, methodus); } })); }).catch((error) => { console.log(error); }); }); }).catch((error) => { console.log(error); }); }); }); }); } }; __decorate([ log_1.Log(), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", Promise) ], MQRouter.prototype, "registerRoutes", null); MQRouter = __decorate([ log_1.LogClass(log_1.logger), __metadata("design:paramtypes", [Object, config_1.ConnectionOptions]) ], MQRouter); exports.MQRouter = MQRouter; //# sourceMappingURL=router.js.map