MsgFlo is a distributed, polyglot FBP (flow-based-programming) runtime. It integrates with other FBP tools like the Flowhub visual programming IDE.
This library makes it easy to create MsgFlo participants in JavaScript/CoffeScript on node.js.
Production
- Used at TheGrid for all workers using AMQP/RabbitMQ, including in imgflo-server
- Also used by noflo-runtime-msgflo
- Experimental support for MQTT and direct transports
MIT, see ./LICENSE
Add as an NPM dependency
npm install --save msgflo-nodejs A simple participant (CoffeeScript)
msgflo = require 'msgflo-nodejs' RepeatParticipant = (client, role) -> definition = component: 'Repeat' icon: 'file-word-o' label: 'Repeats in data without changes' inports: [ id: 'in' type: 'any' ] outports: [ id: 'out' type: 'any' ] process = (inport, indata, callback) -> return callback 'out', null, indata return new msgflo.participant.Participant client, definition, process, role client = msgflo.transport.getClient 'amqp://localhost' worker = RepeatParticipant client, 'repeater' worker.start (err) -> throw err if err console.log 'Worker started' If you expose the participant factory function (examples/Repeat.coffee)
module.exports = RepeatParticipant Then you can use the msgflo-nodejs exectutable to start participant
msgflo-nodejs --name repeater ./examples/Repeat.coffee msgflo-nodejs uses the debug NPM module. You can enable (all) logging using:
export DEBUG=msgflo* msgflo-nodejs has a transport abstraction layer. So to support a new messaging system, implement Client and MessageBrokerinterfaces.
You can then pass the Client instance into a Participant.
Or you can register a new transport using msgflo.transport.register('mytransport', myTransportModule). Then you can get a Client instance using msgflo.transport.getClient('mytransport://somehost:666'). This has the advantage of also working when specifying the broker URL using msgflo-nodejs --broker or MSGFLO_BROKER= environment variable.