Repository  -  API  -  Source


  • Allow publisher confirms to be turned off per exchange
    • Moving towards ES6 features
    • Clean up cases where arguments were being re-written (perf issue)
    • Reduce cases where properties are introduced to hashes after instantiation (perf issue)
    • Rewrite tests into single modules with individual config to make contributing & maintenance easier
    • Move build system to Travis
    • Use coveralls to track code coverage
    • Remove lodash dependency
    • Remove when dependency
    • Change logging to bole
    • Change commit style to conventional commits
    • Adopt semistandard as format style
    • Improve README badges
    • #80 - fixes issue where multiple messages were nack'd in nobatch mode
    • #42 - fixes issue regarding broken build status


  • feature (#72) - support sending persistent messages to default exchanges (thanks @bmatson!)
    • feature (#66) - support passing SSL certs as string (thanks @mrfelton!) making progress callback an optional argument
    • #71 - leave error handler attached to connection object to try and prevent errors from being thrown from the AMQP library
    • #69 - fixes an issue where the *.connection.configured event was not correctly being raised
    • #64 - added mention of deadLetterRoutingKey option to queue declaration
    • #57 - fixes (with breaking change) by removing dependency on deprecated when feature and


  • #52 - serialize arrays as JSON by default
    • Change connection timeout to default to 2 seconds
    • #49 - bug fix for exchange recreation when reconnecting
    • #33, #54 - bug fixes around graceful shutdown


  • #50 - deleting queue after starting subscription causes channel error
    • bug fix - ensure correct SNI is used with SSL connections when using multiple endpoints
    • improvement - switch UUID lib to uuid since node-uuid is deprecated


  • #38 - Correct race conditions in queueFsm and exchangeFsm causing errors during reconnection
    • #37 - Add ability to capture Rabbit generated queue names
    • #36 - Make options optional for addExchange and addQueue
    • #19 - Add support for publishing arrays directly (as buffers)
    • Added Drone build
    • Update dependencies to latest
    • Defect - queues and exchanges with the same name shared channels causing serious problems
    • Improvement - add support for default exchange
    • Improvement - changed from jshint to eslint


  • Improvement - remove Vagrant in favor of just using Dockerfile, updated instructions


  • Bug Fix - Publish no longer throws errors if made before calling addConnection or configure or if exchange does not exist


  • Bug Fix - #26 - fixed a bug preventing bindQueue from working on unique queues
    • Bug Fix - #22 - addConnection did not return a promise (thanks @mkozjak)
    • Enhancement - publishing a number as a body gets converted to a string (thanks @brandonpsmith)
    • Enhancement - routing keys can be changed on binding (thanks @droidenator)


  • Bug fix - corrected bug causing connection.unreachable event not to be prefixed with connection name correctly (thanks @Cyri-L)


  • Bug fix - uri parsing should not including leading slash between host specification and vhost

  • Add section to README about logging

  • Feature - add default and custom strategies for returned mandatory messages


  • 103 - gulp test no longer throws expect.js errors
    • 111 - support exclusive subscriptions when calling startSubscription
    • 112 - add shutdown method to allow node to exit
    • 116 - support multiple serializers
    • 119, 115, 107 - resubscribe to all previously subscribed queues after reconnect
    • 121 - rejectUnhandled should now correctly reject unhandled messages
    • 122 - guarantee support for type and routing keys set to ''
    • Feature - unique property on queue creation allows for "single use" exclusive queues with TTL
      • "hash" adds a numeric value
      • "id" uses client id for clearer ownership
    • Feature - add machine and process info to connection properties for easier identification in management console
    • Feature - consumer tags are now based on "client id"
    • Feature - handlers can now be scoped/limited by queue name
    • Feature - allow custom limits for deferred published messages
    • Feature - add support for AMQP URIs when defining connections
    • Feature - add ability to stop a running subscription to the queue
    • Improvement - use "client id" to create response queue names
    • Improvement - more warning level logging around channel and connection disruption
    • Improvement - ensure UTC timestamps are put on published messages
    • Improvemet - reject reply promise with error if no replyTo address is provided
    • Improvement - set appId to "client id" on publish
    • Improvement - introduce limit to the number of messages an exchange will cache waiting for a connection
    • Improvement - handle blocked and unblocked broker events internally
    • Improvement - limit the number of messages stored per exchange while waiting on a connection
    • Bug fix - do not resolve close on connection until all publishes have been confirmed
    • Bug fix - use reject instead of nack when queues are in noBatch
    • Bug fix - noop nacks and rejections when consuming in no-ack mode
    • Bug fix - channels closed by the broker should still be re-acquired with redefined primitives
    • Bug fix - check for existence of headers before checking for direct-reply-to header. Thanks Matt Young (@mashu-daishi)
    • Breaking - no longer recover automatically from a user terminated connection
    • Breaking - limit number/duration of connection retries
    • Breaking - messages are not auto-re-published when a connection or channel fails

Significant or Breaking changes

  • reply signature has changed to support control over serialziation
  • response queues are named very differently, shouldn't break code, but worth noting
  • wascally.iomonad logging namespace changed to
  • timeouts added to requests

wascally - preserved for history



  • 107 - Correct improper connection timeout configuration and update README
    • Update dependencies to latest versions
    • Use latest whistlepunk log api


  • 91 - Provide publish timeout
    • 98 - No-op duplicate exchange, queue and binding declarations
    • 96 - Fall back to routing key if no type is provided for routing
    • 94 - Update amqplib dependnecy to 0.4.0 to support Node 4
    • 77 - Add explanation of connection events
    • 95 - Add test coverage for wildcards in handle
    • Change log namespaces to use '.' delimiter instead of ':'
    • Add example for VirtualBox in Vagrantfile.sample - thanks, @josephfrazier
    • Correct configuration and README regarding ports, credentials, and clustering - thanks again, @josephfrazier


  • Bug fix - Resolve issue #64 working with node-config no longer throws exceptions by avoiding get call
    • Minor improvement to README to better explain publish promises


  • Bug fix - correct memory leak in req/res by leveraging new postal feature


  • Bug fix - calling destroy on a queue or exchange should defer until they are in ready state.
    • Update machine and monologue versions
    • Remove when.promise and event handles in favor of deferred promises and transitions


  • 65 - Bug Fix: setting replyQueue to false caused publish to fail silently.
    • 63 - Add uri property to connection object emitted for 'connected' event.
    • 61 - Bug Fix: correct SSL URIs - thanks, @longplay
    • Improvements to connection clean up (specifically around resolving outstanding messages on queues)
    • ConnectionFSM - Only emit 'connected' when establishing a new connection, use 'already-connected' otherwise.


Thanks to @dvideby0 and @neverfox for identifying and providing code to help reproduce bugs 39 and 57.

  • 39, 57 - Bug fix: acking responses did not resolve them causing them to pile up in a response queue
  • Bug fix: setting replyQueue to false throws exceptions
  • Bug fix: replying from a service with replyQueue set to false fails
  • Spec update - request spec in integration tests failed to ack messages causing closeAll to hang


  • 47 - Added support for noBatch to queues, thanks @derickbailey!
    • 45 - Bug fix: port option was being ignored, thanks @esatterwhite


Bug fix - bindExchanges flat out broken. Thanks to @leobispo for the catch & fix.


Special thanks to @neverfox for finding and reportig 38 & 39 - both serious problems and very difficult to find/reproduce in any kind of automated test.

  • 38, 39 - I/O getting blocked when publishing at high frequencies (think for/while loops).
    • Removed one-time failed event handler from publish call
    • Cache reject callbacks from publish
    • On publish confirmation, remove reject from deferred array
    • On exchange connection failure, invoke all rejects in deferred array
  • 37 - document use of close and closeAll calls
  • Correct improper use of .then( null, ... ) which was creating additional promises.
  • Update whistlepunk version
  • Include biggulp to simplify the gulpfile (yay?)


  • Add logging support via whistlepunk
    • Add logging statements to assist with troubleshooting/debugging
    • 24 - Connection should not close until after all queues have completed batch processing (only applies to user initiated connection shutdown)
    • 30 - Escape passwords to be connection URI safe
    • 17, 19 - Unhandled messages
    • Nack unhandled messages by default
    • Provide configurable strategies for handling unhandled messages
    • 26 - Support custom reply queue definitions per connection
    • Add behavioral specs to improve coverage and testing story
    • Fix bug in reject batching implementation
    • Refactor of exchange and queue implementation into channel behavior and FSM
    • Reject exchange and queue creation promises on failure
    • Reject publish and subscribe calls on failed exchanges and queues
    • Bug fix - closing a connection didn't reliably clean up channels, exchanges and queues
    • Bug fix - a failed connection that had been closed would continue to attempt reconnecting in the background
    • Bug fix - configure doesn't reject the promise if a connection cannot be established

prerelease 8

  • Add connection timeout
  • Add @derickbailey to contributor list

prerelease 7

  • Add demos and documentation to better explain handlers
  • Allow replies to provide a replyType without specifying more parameter
  • Add support for per-message expiration
  • Add support for reject (nack without re-queue)
  • Code clean-up / addressing linting errors
  • Fix README issues
  • Correct typo in spec
  • Code clean-up / addressing linting errors