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 MessageBroker
interfaces.
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.