示例#1
0
 PubSubRabbit.prototype.connect = function (opts) {
     var _this = this;
     var context = rabbit.createContext(opts.uri);
     var deferred = promise.defer();
     context.on('error', deferred.reject);
     context.on('ready', function () {
         var socket = context.socket(pubSub.PubSubTypes[opts.type].toUpperCase());
         socket.connect(opts.queue, function (res) {
             if (res && res.status == "error") {
                 deferred.reject(res);
             }
             else {
                 _this.context = context;
                 _this.socket = socket;
                 if (opts.onSub) {
                     _this.socket.setEncoding("utf8");
                     _this.socket.on("data", function (data) {
                         var json;
                         try {
                             json = JSON.parse(data);
                         }
                         catch (err) {
                             console.log("Failed to parse data", data);
                             return;
                         }
                         opts.onSub(json);
                     });
                 }
                 deferred.resolve();
             }
         });
     });
     return deferred.promise;
 };
示例#2
0
 return new Promise((resolve) => {
   if (_context) {
     resolve(_context)
   } else {
     _context = rabbit.createContext(`amqp://${process.env.RABBITMQ || '192.168.99.100'}`)
     _context.on('ready', () => {
       resolve(_context)
     })
   }
 })
示例#3
0
app.post('/boards', function(req, res) {
    var context = rabbitmq.createContext('amqp://'+process.env.RABBITMQ_PORT_5672_TCP_ADDR+':5672');

    logger.log('info', 'board.new received: ' + req.body);

    // call the board generator with the rabbit mq context, the board data and type and a callback
    board.create(context, req.body, req.get('Content-Type'), function(err, result) {
        if (!err){
            logger.log('info', 'Success');
            res.json(result);
        } else {
            logger.log('error', err);
            res.status(400).json(result);
        }
    });
});
示例#4
0
wifi.start = function(db) {
  var context = rabbit.createContext();
  context.on('ready', function() {
    var sub = context.socket('SUB'); // subscription
    sub.setEncoding('utf-8');
    sub.connect(config.EXCHANGE_NAME, '', function() {
      sub.on('data', function(data) {
        console.log('got data from rabbitmq: ' + data);
        if (utils.isMacAddress(data)) {
          consume(db, data);
        }
      });
    });
  });
  context.on('error', function(err) {
    // attaching the error handler and re-throwing the error here makes it
    // slightly easier to debug
    throw err;
  });
};
示例#5
0
  function createContext(next) {
    context = rabbit.createContext(config.AMQP_HOST);
    context.on('ready', function () {
      info('RabbitMQ connected.');
      next();
    });

    context.on('error', function (e) {
      error(e);
    });

    context.on('close', function () {
      error('RabbitMQ closed.');
      info('RabbitMQ try to reconnect... ' + reconnectCount);
      if (reconnectCount++ < 10)
        setTimeout(exports.connect, 2000);
      else {
        error('RabbitMQ connection fail');
        error('Server is shutting down...');
        process.exit(1);
      }
    });
  }
示例#6
0
var logger = require('./lib/logger'),
    rabbitmq = require('rabbit.js'),
    router = require('./lib/router');

logger.info('board: running');

var context = rabbitmq.createContext(
    'amqp://' + process.env.RABBITMQ_PORT_5672_TCP_ADDR + ':' + process.env.RABBITMQ_PORT_5672_TCP_PORT
);

context.on('ready', function () {

    logger.info('board: connected');

    // subscribe to pub and sub queues
    var sub = context.socket('SUB'),
        pub = context.socket('PUB');

    pub.connect('events', function () {

        sub.connect('events', function () {

            // deal with facts as they come in
            sub.on('data', function (body) {
                logger.info("new fact : " + body);
                router.newFact(pub, JSON.parse(body));
            });
        });
    });
});
var rabbit = require('rabbit.js');
var context = rabbit.createContext();
var publish = context.socket('PUB');
var subscribe = context.socket('SUB');
var serviceName;

module.exports.init = function (srvName, callback) {
    serviceName = srvName;
    context.on('ready', function() {
      subscribe.connect('events', function() {
        publish.connect('events', function() {
            callback();
        });
      });
    });
};

module.exports.emit = function (eventName, params) {
    publish.write(JSON.stringify({
        eventName: eventName,
        params: params || {},
        timestamp: Date.now(),
        service: serviceName
    }));
};

module.exports.on = function (eventName, callback) {
    subscribe.on('data', function (data) {
        var event = JSON.parse(data);
        if (event.eventName === eventName) {
            callback(event.params);
示例#8
0
Coyote.prototype.initContext = function() {
  this.context = rabbit.createContext(this.amqpUri);
};
示例#9
0
var express     = require("express"); 
var validator   = require('validator'); 
var rabbit      = require('rabbit.js'); 
var ctx         = rabbit.createContext(); 
var pub         = ctx.socket('PUSH'); 
var signup      = ctx.socket('PUSH'); 
var redis       = require('redis').createClient(); 
var app         = express(); 
var config      = require('./config'); 
var db          = require('./lib/mysql')(config.db); 
var bodyParser  = require('body-parser'); 
var extend      = require('util')._extend; 
var Datastore   = require('nedb'); 
var Invitations = new Datastore({filename: 'invitations.db', autoload: true}); 

app.use(express.static(__dirname + '/public')); 
app.set('view engine', 'ejs'); 
app.set('views', __dirname + '/views'); 

app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 

app.get('/', function(req, res){
    res.render('mainpage');  
}); 

app.get('/signup/:confirmationKey', function(req, res){

    db.query('SELECT id, email FROM emails WHERE confirmation_key = ?', 
    [req.params.confirmationKey], 
    function(err, record){
示例#10
0
module.exports = function (config) {
  config = config || {};

  var context = rabbit.createContext(config.context || rabbitCtx);
  var defaults = _.defaults(config.defaults || {}, socketDefaults);

  //
  // on connection to rabbit
  //
  context.on('ready', function () {

    // for every socket
    _.each(config.sockets, function (socket) {
      socket = _.defaults(socket, defaults);

      // set up the socket
      var sockInstance = context.socket(socket.type, socket.options);
      sockInstance.setEncoding('utf8');

      // find controller definition

      var controller = null;
      if (_.isString(socket.controller)) {
        if (!config.controllers) {
          throw new Error('A controller directory is required to string based controllers');
        }

        config.controllers = /\/$/.test(config.controllers) ? config.controllers : config.controllers + '/'
        var ctrlSplit   = (socket.controller || '').split('.');
        var ctrlPath    = config.controllers + ctrlSplit[0];
        var ctrlHandler = ctrlSplit[1];

        try {
          controller = require(ctrlPath);

          if (ctrlHandler) {
            controller = controller[ctrlHandler];
          }
        } catch (e) {
          if (!~e.message.indexOf('Cannot find module \'' + ctrlPath + '\'')) {
            console.log(e.stack)
          }
          console.log('! Controller ' + socket.controller + ' not found verify path and handler: ' + ctrlPath + ' [' +  ctrlHandler+ ']')
          return;
        }
      } else if (_.isFunction(socket.controller)) {
        controller = socket.controller;

      } else {
        throw new Error('Controller of type ' + (typeof socket.controller) + ' must be a Function or String');
      }

      // define the connection details
      if (socket.topic) {
        sockInstance.connect(socket.channel, socket.topic);
      } else {
        sockInstance.connect(socket.channel);
      }

      //
      // bind the socket to the event
      //
      sockInstance.on(socket.listen, function(data){
        var socketReq = {
          context    : context,
          channel    : socket.channel,
          controller : config.controllers ? socket.controller : 'anonymous_controller',
          message    : data,
        };

        var coreFunction = co(function *(){
          if (config.json) {
            try {
              socketReq.json = JSON.parse(data);
            } catch (e) {
              console.log(e.stack)
              throw new Error('Failed to parse message:\n' + data);
            }
          }

          if (config.middleware) {
            yield config.middleware.call(socketReq, function *() {
              yield controller.call(socketReq);
            });
          } else {
            yield controller.call(socketReq);
          }
        });

        var genericError = function *(err) { console.log(err.stack); }

        if (config.error) {
          coreFunction.catch(function (err) {
            co(function *() {
              yield config.error.call(socketReq, err);
            }).catch(genericError);
          });

        } else {
          coreFunction.catch(genericError)
        }
      });
    });
  });
}
示例#11
0
文件: app.js 项目: squaremo/sky-pony
// For interactive use
exports.sockjs = sjs;
exports.http = app;


// ==== Client connections

sjs.on('connection', function(c) {
  clientConnection(c);
});

// Sockets for us to communicate with the "backend" services

var scheduler_proxy = {};

var context = rjs.createContext();
context.on('ready', function() {
  var updates = context.socket('SUB');
  updates.setEncoding('utf8');
  updates.on('data', injectUpdate);
  updates.connect('updates');

  var subscriptions = context.socket('PUSH');
  subscriptions.connect('subscriptions');

  // Not convinced about this proxy thing.
  scheduler_proxy.subscribe = function(topic) {
    subscriptions.write(JSON.stringify({subscribe: topic}));
  }
});
示例#12
0
var initializeRabbitMQ = function(callback){
  _context = rabbit.createContext(config.rabbit.url);
  _context.on('ready', function(){ callback(null); });
};
var rabbitjs = require('rabbit.js');
//var amqp = require('amqp');

var queueSocket = "amqp://localhost";
var exchangeName = "Gems.Individual.Events.Status.Fanout";
var message = {
	Name : "Vignesh Munirajan",
	LogCorrelationId : 123,
	Body : null
};
var encoding = "utf8";

var context = rabbitjs.createContext(queueSocket);
var publisher = context.socket("PUB", {routing: 'fanout', persistent: false});
publisher.connect(exchangeName, function(){
	console.log("Connected");
	var data = JSON.stringify(message);
	var i = 0;
	do {
		i += 1;
		publisher.write(data, encoding);
		console.log("[%s] Message Published: %s", i,data);	
	} while (i < 10);
	console.log(data);
	//publisher.write(message);
})
//context.close();