hubby

A high feature, distributed, low latency and secure message exchange bus based on redis and mongodb

hubby, A high feature, distributed, low latency and secure message exchange bus based on redis and mongodb

Warning I: this project is in early development stage, you might not find it useful for now.

Hubby has the following features working:

  • Message queue
  • Message broadcast
  • Message schema validation using amanda

Each schema has his own queue, so listener programs will need to subscribe to schema names.

$ npm install hubby
var hubby = require('hubby')();
 
hubby.on('initialized', function(){
    // message schema format 
    var messageSchema = {
        type: 'object',
        additionalProperties: false,
        properties: {
            sender: {
                required: true,
                type: 'string'
            },
            recipient: {
                required: true,
                type: 'string'
            },
            subject: {
                required: true,
                type: 'string'
            },
            body: {
                required: true,
                type: 'string'
            }
        }
    };
 
    // create or update the schema 
    hubby.createSchema('Message', function(schema){
        console.log('Schema \'Message\' created');
    }, null, messageSchema);
 
    // subscribe to 'Message' schema queue 
    hubby.subscribe(['Message'], function(err){
        if(err){
            console.log('Subscribe error');
        } else {
            console.log('Subscribed to: \'Message\'');
        }
    });
 
});
 
hubby.on('Message', function(msg){
    // this msg parameter is an object { uuid: '', schema: { name: '', version: 0 } } 
    var m = JSON.parse(msg);
    // get the real message queued 
    hubby.requestMessage(m.uuid, function(message){
        if ( message && message.content ){
            // do something useful 
            console.log('Message from ' + message.content.sender + ' to ' + message.content.recipient + ' received');
            // mark message as read 
            hubby.setMessageStatus(m.uuid, 'read', function(){
                            out.loginfo(plugin, 'message processed');
                      });
        } else {
            console.log('Message ' + m.uuid + ' not found');
        }
    });
});
 
// redis and mongo configuration 
// these are the default values 
var conf = {
    redis: {
        host: 'localhost',
        port: 6379
    },
    mongo: {
        host : 'localhost',
        port : 27017,
        db: 'hubby',
        args : {
            auto_reconnect : true
        }
    }
};
 
// if mongo and redis are in their default ports, you don't need to use the conf parameter 
hubby.initialize(conf);
 
// sending a message 
 
// sample message content 
var content = {
    sender: 'test@test.com',
    recipient: 'test2@test.com',
    subject: 'this is a test message',
    body: 'nothing special here'
};
 
// get the schema 
hubby.createSchema('Message', function(schema){
    // create an empty new message 
    hubby.createMessage(function(message){
        // set schema properties 
        message.schema = {name: schema.name, version: schema.version};
        // ser content 
        message.setContent(content, function(resulterr){
            if ( !err ){
                // finally send some message 
                hubby.enqueue(message);
            } else {
                // uh-oh... validation error 
                console.log('validation error: ' + err );
            }
        });
    });
});
 

hubby.on('broadcast', function(messageNotification){})

hubby.on('<schema name>', function(messageNotification){})

Big TODO here.

  • better documentation of the source code;
  • better error handling
  • code cleanup
  • a real document page, examples, and so on;
  • tests!
  • jsHint standards we don't like code standards.

Copyright (C) 2012 Humantech Gestao do Conhecimento

Distributed under the MIT License, the same as NodeJS.

Read this if you're in doubt.