itv / bucky

A lightweight Scala AMQP client

Website GitHub

Cats Friendly Badge

Build Status Join the chat at https://gitter.im/com.itv-bucky/Lobby

(under construction: v1 docs, v2 docs)

Migrating to 2.0.0-M28 and above

Version 2.0.0-28 introduced a change to default all dead letter exchanges to be Fanout by default. Previously these were Direct. The reason for this change is due to an issue when multiple queues are bound to the same routing key on the same exchange and vice versa. When a handler dead letters a message it will be lost into the Ether as the broker can't work out where to send it.

To upgrade:

  • The signature of requeueDeclarations has changed. Try to use the new default dlx exchange type where possible.
  • If changing the dlx type, delete the .requeue, .dlx and .redeliver exchanges manually before deploying your newly upgraded service. If you don't do this, the service will fail to start complaining about mismatching Exchange types.

If you really must continue using a Direct exchange:

  • If using Wiring, use setDeadLetterExchangeType = ExchangeType.Direct
  • If using requeueDeclarations, you will need to pass in dlxType=Direct.