Skip to content
/ hubby Public
forked from humantech/hubby

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

License

Notifications You must be signed in to change notification settings

tewald/hubby

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Install from npm

$ npm install hubby

Usage

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: '[email protected]',
	recipient: '[email protected]',
	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(result, err){
			if ( !err ){
				// finally send some message
				hubby.enqueue(message);
			} else {
				// uh-oh... validation error
				console.log('validation error: ' + err );
			}
		});
	});
});

Available events

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

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

API

Big TODO here.

TODO

  • 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.

License

Copyright (C) 2012 Humantech Gestao do Conhecimento

Distributed under the MIT License, the same as NodeJS.

Read this if you're in doubt.

References

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%