UNPKG

@yhiot/utils

Version:
279 lines (239 loc) 8.55 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.createMqReceiver = createMqReceiver; exports.createMqTransmitter = createMqTransmitter; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _amqplib = _interopRequireDefault(require("amqplib")); var _debug2 = _interopRequireDefault(require("debug")); /** * websocket收发服务器,接收来自processor的消息,通过websocket发送给客户端. * 监听 im.transceiver.<serverid> */ var debug = (0, _debug2.default)('app:amq'); function createMqReceiver() { return _createMqReceiver.apply(this, arguments); } function _createMqReceiver() { _createMqReceiver = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() { var opts, url, exchange, key, processor, conn, channel, queue, consumer, _args6 = arguments; return _regenerator.default.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: opts = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : { url: 'localhost', exchange: '<none_exchange>', key: '<none_key>', processor: null }; url = opts.url, exchange = opts.exchange, key = opts.key, processor = opts.processor; if (!(!url || !exchange || !key || !processor)) { _context6.next = 5; break; } debug('error params!', opts); throw new Error('params missing!'); case 5: _context6.next = 7; return _amqplib.default.connect(url); case 7: conn = _context6.sent; conn.on('close', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() { return _regenerator.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: debug('event close!'); case 1: case "end": return _context4.stop(); } } }, _callee4); }))); _context6.next = 11; return conn.createChannel(); case 11: channel = _context6.sent; _context6.next = 14; return channel.assertExchange(exchange, 'topic', { durable: false }); case 14: _context6.next = 16; return channel.assertQueue('', { exclusive: true }); case 16: queue = _context6.sent; _context6.next = 19; return channel.bindQueue(queue.queue, exchange, key); case 19: _context6.next = 21; return channel.consume(queue.queue, /*#__PURE__*/function () { var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(msg) { var strmsg; return _regenerator.default.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: strmsg = msg.content.toString(); debug('consume:', strmsg); if (!processor) { _context5.next = 5; break; } _context5.next = 5; return processor(strmsg); case 5: case "end": return _context5.stop(); } } }, _callee5); })); return function (_x3) { return _ref3.apply(this, arguments); }; }(), { noAck: true }); case 21: consumer = _context6.sent; debug('createMqReceiver ok!', opts, consumer); return _context6.abrupt("return", { conn: conn, channel: channel, consumer: consumer }); case 24: case "end": return _context6.stop(); } } }, _callee6); })); return _createMqReceiver.apply(this, arguments); } function createMqTransmitter() { var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { url: 'localhost', exchange: '<none_exchange>' }; var conn_channel = null; /** * 创建发送器,发往MQ. * @param {json} opts */ function createConnChannel() { return _createConnChannel.apply(this, arguments); } /** * 发送msg到key * key为'im.processor','im.transceiver.[serverId]' */ function _createConnChannel() { _createConnChannel = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() { var opts, url, exchange, conn, channel, _args3 = arguments; return _regenerator.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: opts = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : { url: 'localhost', exchange: '<none_exchange>' }; url = opts.url, exchange = opts.exchange; _context3.next = 4; return _amqplib.default.connect(url); case 4: conn = _context3.sent; conn.on('close', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() { return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: debug('event close! need restart after 10 sencods?'); conn_channel = null; case 2: case "end": return _context2.stop(); } } }, _callee2); }))); _context3.next = 8; return conn.createChannel(); case 8: channel = _context3.sent; channel.assertExchange(exchange, 'topic', { durable: false }); debug('createMqTransmitter ok!', opts); return _context3.abrupt("return", { conn: conn, channel: channel }); case 12: case "end": return _context3.stop(); } } }, _callee3); })); return _createConnChannel.apply(this, arguments); } return /*#__PURE__*/function () { var _send = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(msg, key) { var strmsg, result; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (conn_channel) { _context.next = 4; break; } _context.next = 3; return createConnChannel(opts); case 3: conn_channel = _context.sent; case 4: strmsg = JSON.stringify(msg); _context.next = 7; return conn_channel.channel.publish(opts.exchange, key, Buffer.from(strmsg)); case 7: result = _context.sent; debug('+send:', key, strmsg, result); return _context.abrupt("return", true); case 10: case "end": return _context.stop(); } } }, _callee); })); function send(_x, _x2) { return _send.apply(this, arguments); } return send; }(); }