UNPKG

10.7 kBSource Map (JSON)View Raw
1{"version":3,"file":"EventListener.js","sourceRoot":"","sources":["../src/EventListener.ts"],"names":[],"mappings":"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","sourcesContent":["import { channelManager } from './ChannelManager'\nimport { Channel } from \"amqplib/callback_api\"\nimport {Options} from \"amqplib/properties\";\nconst EXCHANGE_PREFIX = \"nimbus:event:\";\nconst EXCHANGE_ALL_EVENTS = \"nimbus:events\";\nconst EXCHANGE_EVENTS_BY_USER = \"nimbus:eventsByUser\";\nconst QUEUE_PREFIX = \"nimbus:listener:\";\nconst QUEUE_OPTIONS = { durable: false, autoDelete: true, exclusive: true};\nconst PERSISTENT_QUEUE_OPTIONS = { durable: true, autoDelete: false, exclusive: false};\nconst QUEUE_RUNTIME_OPTIONS = { durable: false, autoDelete: true};\nconst EXCHANGE_OPTIONS = { durable: true, autoDelete: false };\n\nimport util = require(\"util\");\n\nvar debug = util.debuglog(\"amqptools\");\n\nexport interface EventListenerConstructorOptions {\n exchange?: string;\n runtime?: string;\n topic?: string;\n userId?: string;\n persistent?: boolean;\n autoAck?: boolean;\n prefetchCount?: number;\n}\n\nexport interface MessageExtra {\n ack?: () => void\n}\n\nexport interface ListenerFunc {\n (message: any, extra: MessageExtra): void\n}\n\nexport class EventListener {\n exchange: string;\n topic: string;\n queue: string;\n userId: string;\n // listener queue wont be removed after client disconnects(durable + no auto-delete)\n persistent: boolean = false;\n // auto-ack event message\n autoAck: boolean = true;\n prefetchCount: number;\n private listener: ListenerFunc;\n private queueOptions: Options.AssertQueue;\n private consumerTag: string;\n\n constructor(options: EventListenerConstructorOptions) {\n this.exchange = options.exchange;\n this.topic = options.topic;\n this.userId = options.userId;\n this.queueOptions = QUEUE_OPTIONS;\n this.prefetchCount = options.prefetchCount || 1\n if(options.hasOwnProperty(\"persistent\")) {\n this.persistent = options.persistent;\n }\n if(options.hasOwnProperty(\"autoAck\")) {\n this.autoAck = options.autoAck;\n }\n if (options.runtime) {\n this.queue = QUEUE_PREFIX + options.runtime +\n (this.exchange ? ':' + this.exchange : '') +\n (this.topic ? ':' + this.topic : '');\n this.queueOptions = QUEUE_RUNTIME_OPTIONS;\n if(this.persistent) {\n this.queueOptions = PERSISTENT_QUEUE_OPTIONS;\n }\n }\n\n channelManager.on(\"reconnect\", this.onReconnect);\n }\n\n onReconnect = () => {\n debug(\"Trying to re establish consuming on event queue %s\", this.queueName);\n this.consume();\n }\n\n get fullExchangeName(): string {\n if (this.userId) {\n return EXCHANGE_EVENTS_BY_USER;\n }\n return this.exchange ? EXCHANGE_PREFIX + this.exchange : EXCHANGE_ALL_EVENTS;\n }\n\n get queueName(): string {\n return this.queue;\n }\n\n get routeKey(): string {\n if (!this.topic && !this.exchange && !this.userId) return '#';\n return [this.exchange, this.topic]\n .map(str => (str ? str : '*'))\n .join('.')\n .concat(this.userId ? '.' + this.userId : '');\n }\n\n set queueName(val: string) {\n this.queue = val;\n }\n\n private assertExchange() {\n return channelManager.getChannel().then((channel) => {\n return new Promise((resolve, reject) => {\n channel.assertExchange(this.fullExchangeName, \"topic\", EXCHANGE_OPTIONS,\n (err) => err ? reject(err) : resolve(channel));\n })\n })\n }\n\n private assertQueue() {\n return channelManager.getChannel().then((channel) => {\n return new Promise((resolve, reject) => {\n channel.assertQueue(this.queueName, this.queueOptions, (err, ok) => {\n if (err) return reject(err);\n this.queueName = ok.queue;\n resolve(channel);\n });\n })\n })\n }\n\n private bindQueue() {\n return channelManager.getChannel().then((channel) => {\n return new Promise<Channel>((resolve, reject) => {\n channel.bindQueue(this.queueName, this.fullExchangeName, this.routeKey, {},\n (err) => err ? reject(err) : resolve(channel));\n })\n })\n }\n\n private ack(msg) {\n return channelManager.getChannel().then((channel) => {\n channel.ack(msg);\n });\n }\n\n private onMessageReceived = (msg) => {\n var message = JSON.parse(msg.content.toString());\n var extra: MessageExtra = {};\n if(this.autoAck) {\n this.ack(msg);\n }\n else {\n extra.ack = () => {\n this.ack(msg);\n };\n }\n this.listener(message, extra);\n }\n\n private consume() {\n let _this = this;\n return this.assertExchange()\n .then(() => this.assertQueue())\n .then(() => this.bindQueue())\n .then((channel) => {\n channel.prefetch(this.prefetchCount)\n channel.consume(this.queueName, this.onMessageReceived, undefined, function (err, ok) {\n if(err) {\n console.error(\"Fail to consume on queue \" + _this.queueName, err)\n throw err\n }\n _this.consumerTag = ok.consumerTag;\n });\n });\n }\n\n listen(listener: (message, extra?) => void) {\n if(this.listener) {\n throw new Error(\"Listener is already set\");\n }\n this.listener = listener;\n return this.consume();\n }\n\n cancel() {\n channelManager.getChannel().then((channel) => {\n channel.cancel(this.consumerTag);\n channelManager.removeListener(\"reconnect\", this.onReconnect);\n }) \n }\n}"]}
\No newline at end of file