jetstream-microservice
Version:
Jetstream Node Package for easy implementation of Jetstream microservices
1 lines • 2.06 kB
JavaScript
function pub(e,n,a){var o=global.jetstreamConfig.name,u=process.argv.slice(2).join(" ")||JSON.stringify(e);global.queueChannel.publish(o,"",new Buffer(u)),n&&n()}var Guid=require("guid"),amqp=require("amqplib/callback_api");void 0==global.queueEvents&&(global.queueEvents=[]),void 0==global.queueConnection&&(global.queueConnection=null),void 0==global.queueChannel&&(global.queueChannel=null),module.exports={connect:function(){var e=function(){amqp.connect(global.jetstreamConfig.amqpHost,function(n,a){n?(global.dependencies.amqp=!1,console.log("AMQP connection failed, retrying in 5 seconds..."),setTimeout(function(){e()},5e3)):(global.dependencies.amqp=!0,global.queueConnection=a,a.createChannel(function(e,n){global.queueChannel=n;var a=global.jetstreamConfig.name+".queue";n.assertQueue(a,{durable:!0}),console.log(" [*] Waiting for Work messages in %s.",a),n.consume(a,function(e){var n=JSON.parse(e.content.toString());global.queueEvents.forEach(function(e){e.name===n.name&&(e.distribute?pub(n):e.callback(n.payload))})},{noAck:!0});var o=global.jetstreamConfig.name+"."+Guid.raw().substring(0,8);n.assertExchange(global.jetstreamConfig.name,"fanout",{durable:!1}),n.assertQueue(o,{exclusive:!0},function(e,a){console.log(" [*] Waiting for pub/sub messages in %s.",a.queue),n.bindQueue(a.queue,global.jetstreamConfig.name,""),n.consume(a.queue,function(e){var n=JSON.parse(e.content.toString());global.queueEvents.forEach(function(e){e.name===n.name&&e.callback(n.payload)})},{noAck:!0})})}))})};e()},on:function(e,n,a){global.queueEvents.push({name:e,callback:n,distribute:a||!1})},emit:function(e,n,a,o){var u="service-registry.queue",l={trace_id:Guid.raw(),source:global.jetstreamConfig.name,name:e,timestamp:new Date,payload:n},t=process.argv.slice(2).join(" ")||JSON.stringify(l);global.queueChannel.assertQueue(u,{durable:!0}),global.queueChannel.sendToQueue(u,new Buffer(t),{persistent:!0}),a&&a(l)},publish:function(e,n,a,o){var u={trace_id:Guid.raw(),source:global.jetstreamConfig.name,name:e,timestamp:new Date,payload:n};pub(u,a,o)}};