diff --git a/lib/amqp_client.js b/lib/amqp_client.js index 32136e5..65a48f6 100644 --- a/lib/amqp_client.js +++ b/lib/amqp_client.js @@ -440,6 +440,8 @@ AMQPClient.prototype.createReceiver = function(source, filter, cb) { var linkName = source + '_RX'; if (this._attaching[linkName]) { + self._onReceipt[linkName].push(cb); + return new Promise(function(resolve, reject) { var attachingListener = function(link) { if (link.name === linkName) { diff --git a/test/integration/qpid/client.test.js b/test/integration/qpid/client.test.js index 2e5bbb4..81ae4ad 100644 --- a/test/integration/qpid/client.test.js +++ b/test/integration/qpid/client.test.js @@ -1,6 +1,7 @@ 'use strict'; var AMQPClient = require('../../..').Client, Message = require('../../../lib/types/message'), + Promise = require('bluebird'), config = require('./config'), expect = require('chai').expect; @@ -36,6 +37,29 @@ describe('Client', function() { }); }); + it('should be able to create multiple receivers for same link', function(done) { + var receviedCount = 0; + var messageHandler = function(err, message) { + expect(message.body).to.equal('TESTMESSAGE'); + receviedCount++; + if (receviedCount === 2) done(); + }; + + test.client.connect(config.address) + .then(function() { + return Promise.all([ + test.client.createReceiver(config.defaultLink, null, messageHandler), + test.client.createReceiver(config.defaultLink, null, messageHandler) + ]); + }) + .then(function() { + return test.client.send('TESTMESSAGE', config.defaultLink); + }) + .catch(function(err) { + expect(err).to.not.exist; + }); + }); + describe('Messages', function() { [ {