summaryrefslogtreecommitdiff
path: root/Changelog.rst
diff options
context:
space:
mode:
authorAsif Saif Uddin <auvipy@gmail.com>2019-11-20 00:13:41 +0600
committerGitHub <noreply@github.com>2019-11-20 00:13:41 +0600
commitb8f933d3377454a9bb8fba2e295fc5343de38942 (patch)
tree0e2e7a0b58947ae9dbeaf8b9d429484c63a7d678 /Changelog.rst
parent10d64c38ca041d22f034c6fa4fd317f99daaa512 (diff)
downloadkombu-b8f933d3377454a9bb8fba2e295fc5343de38942.tar.gz
Rename Changelog to Changelog.rst
Diffstat (limited to 'Changelog.rst')
-rw-r--r--Changelog.rst4454
1 files changed, 4454 insertions, 0 deletions
diff --git a/Changelog.rst b/Changelog.rst
new file mode 100644
index 00000000..0a861bb9
--- /dev/null
+++ b/Changelog.rst
@@ -0,0 +1,4454 @@
+.. _changelog:
+
+================
+ Change history
+================
+
+.. _version-4.6.6:
+
+4.6.6
+=====
+:release-date: 2019-11-11 00:15 A.M UTC+6:00
+:release-by: Asif Saif Uddin
+
+- Revert _lookup_direct and related changes of redis.
+- Python 3.8 support
+- Fix 'NoneType' object has no attribute 'can_read' bug of redis transport
+- Issue #1019 Fix redis transport socket timeout
+- Add wait timeout settings to receive queue message (#1110)
+- Bump py-amqp to 2.5.2
+
+.. _version-4.6.5:
+
+4.6.5
+=====
+:release-date: 2019-09-30 19:30 P.M UTC+6:00
+:release-by: Asif Saif Uddin
+
+- Revert _lookup api and correct redis implemetnation.
+- Major overhaul of redis test cases by adding more full featured fakeredis module.
+- Add more test cases to boost coverage of kombu redis transport.
+- Refactor the producer consumer test cases to be based on original mocks and be passing
+- Fix lingering line length issue in test.
+- Sanitise url when include_password is false
+- Pinned pycurl to 7.43.0.2 as it is the latest build with wheels provided
+- Bump py-amqp to 2.5.2
+
+
+.. _version-4.6.4:
+
+4.6.4
+=====
+:release-date: 2019-08-14 22:45 P.M UTC+6:00
+:release-by: Asif Saif Uddin
+
+- Use importlib-metadata instead of pkg_resources for better performance
+- Allow users to switch URLs while omitting the resource identifier (#1032)
+- Don't stop receiving tasks on 503 SQS error. (#1064)
+- Fix maybe declare (#1066)
+- Revert "Revert "Use SIMEMBERS instead of SMEMBERS to check for queue (Redis Broker)
+- Fix MongoDB backend to work properly with TTL (#1076)
+- Make sure that max_retries=0 is treated differently than None (#1080)
+- Bump py-amqp to 2.5.1
+
+
+.. _version-4.6.3:
+
+4.6.3
+=====
+:release-date: 2019-06-15 12:45 A.M UTC+6:00
+:release-by: Asif Saif Uddin
+
+- Revert FastUUID for kombu 4.6
+
+
+.. _version-4.6.2:
+
+4.6.2
+=====
+:release-date: 2019-06-15 12:45 A.M UTC+6:00
+:release-by: Asif Saif Uddin
+
+- Fix sbugs and regressions
+
+
+.. _version-4.6.1:
+
+4.6.1
+=====
+:release-date: 2019-06-06 10:30 A.M UTC+6:00
+:release-by: Asif Saif Uddin
+
+- Fix some newly introduced bug in kombu 4.6
+
+.. _version-4.6.0:
+
+4.6.0
+=====
+:release-date: 2019-05-30 15:30 P.M UTC+6:00
+:release-by: Asif Saif Uddin
+
+-
+
+.. _version-4.5.0:
+
+4.5.0
+=====
+:release-date: 2019-03-3 18:30 P.M UTC+3:00
+:release-by: Omer Katz
+
+- The Redis transport now supports a custom separator for keys.
+
+ Previously when storing a key in Redis which represents a queue
+ we used the hardcored value ``\x06\x16`` separator to store
+ different attributes of the queue in the queue's name.
+
+ The separator is now configurable using the sep
+ transport option:
+
+ .. code-block:: python
+
+ with Connection('redis://', transport_options={
+ 'sep': ':',
+ }):
+ # ...
+ pass
+
+ Contributed by **Joris Beckers**
+
+- When the SQS server returns a timeout we ignore it and keep trying
+ instead of raising an error.
+
+ This will prevent Celery from raising an error and hanging.
+
+ Contributed by **Erwin Rossen**
+
+- Properly declare async support for the Qpid transport.
+
+ If you are using this transport we strongly urge you to upgrade.
+
+ Contributed by **Rohan McGovern**
+
+- Revert `celery/kombu#906 <https://github.com/celery/kombu/pull/906>`_ and
+ introduce unique broadcast queue names as an optional keyword argument.
+
+ If you want each broadcast queue to have a unique name specify `unique=True`:
+
+ .. code-block:: pycon
+
+ >>> from kombu.common import Broadcast
+ >>> q = Broadcast(queue='foo', unique=True)
+ >>> q.name
+ 'foo.7ee1ac20-cda3-4966-aaf8-e7a3bb548688'
+ >>> q = Broadcast(queue='foo')
+ >>> q.name
+ 'foo'
+
+- Codebase improvements and fixes by:
+
+ - **Omer Katz**
+
+.. _version-4.4.0:
+
+4.4.0
+=====
+:release-date: 2019-03-3 9:00 P.M UTC+2:00
+:release-by: Omer Katz
+
+- Restore bz2 import checks in compression module.
+
+ The checks were removed in `celery/kombu#938 <https://github.com/celery/kombu/pull/938>`_ due to assumption that it only affected Jython.
+ However, bz2 support can be missing in Pythons built without bz2 support.
+
+ Contributed by **Patrick Woods**
+
+- Fix regression that occurred in 4.3.0
+ when parsing Redis Sentinel master URI containing password.
+
+ Contributed by **Peter Lithammer**
+
+- Handle the case when only one Redis Sentinel node is provided.
+
+ Contributed by **Peter Lithammer**
+
+- Support SSL URL parameters correctly for `rediss://`` URIs.
+
+ Contributed by **Paul Bailey**
+
+- Revert `celery/kombu#954 <https://github.com/celery/kombu/pull/954>`_.
+ Instead bump the required redis-py dependency to 3.2.0
+ to include this fix `andymccurdy/redis-py@4e1e748 <https://github.com/andymccurdy/redis-py/commit/4e1e74809235edc19e03edb79c97c80a3e4e9eca>`_.
+
+ Contributed by **Peter Lithammer**
+
+- Added support for broadcasting using a regular expression pattern
+ or a glob pattern to multiple Pidboxes.
+
+ Contributed by **Jason Held**
+
+.. _version-4.3.0:
+
+4.3.0
+=====
+:release-date: 2019-01-14 7:00 P.M UTC+2:00
+:release-by: Omer Katz
+
+- Added Python 3.7 support.
+
+ Contributed by **Omer Katz**, **Mads Jensen** and **Asif Saif Uddin**
+
+- Avoid caching queues which are declared with a TTL.
+
+ Queues that are declared with a TTL are now also be excluded from the
+ in-memory cache in case they expire between publishes on the same channel.
+
+ Contributed by **Matt Yule-Bennett**
+
+- Added an index to the Message table for the SQLAlchemy transport.
+
+ The index allows to effectively sorting the table by the message's timestamp.
+
+ .. note::
+
+ We do not provide migrations for this model yet.
+ You will need to add the index manually if you are already
+ using the SQLAlchemy transport.
+
+ The syntax may vary between databases.
+ Please refer to your database's documentation for instructions.
+
+ Contributed by **Mikhail Shcherbinin**
+
+- Added a timeout that limits the amount of time we retry
+ to reconnect to a transport.
+
+ Contributed by **:github_user:`tothegump`**
+
+- :class:``celery.asynchronous.hub.Hub`` is now reentrant.
+
+ This allows calling :func:`celery.bin.celery.main` to revive a worker in
+ the same process after rescuing from shutdown (:class:``SystemExit``).
+
+ Contributed by **Alan Justino da Silva**
+
+- Queues now accept string exchange names as arguments as documented.
+
+ Tests were added to avoid further regressions.
+
+ Contributed by **Antonio Gutierrez**
+
+- Specifying names for broadcast queues now work as expected.
+
+ Previously, named broadcast queues did not create multiple queues per worker.
+ They incorrectly declared the named queue which resulted in one queue per
+ fanout exchange, thus missing the entire point of a fanout exchange.
+ The behavior is now matched to unnamed broadcast queues.
+
+ Contributed by **Kuan Hsuan-Tso**
+
+- When initializing the Redis transport in conjunction with gevent
+ restore all unacknowledged messages to queue.
+
+ Contributed by **Gal Cohen**
+
+- Allow :class:``kombu.simple.SimpleQueue`` to pass queue_arguments to Queue object.
+
+ This allows :class:``kombu.simple.SimpleQueue`` to connect to RabbitMQ queues with
+ custom arguments like 'x-queue-mode'='lazy'.
+
+ Contributed by **C Blue Neeh**
+
+- Add support for 'rediss' scheme for secure Redis connections.
+
+ The rediss scheme defaults to the least secure form, as
+ there is no suitable default location for `ca_certs`. The recommendation
+ would still be to follow the documentation and specify `broker_use_ssl` if
+ coming from celery.
+
+ Contributed by **Daniel Blair**
+
+- Added the Azure Storage Queues transport.
+
+ The transport is implemented on top of Azure Storage
+ Queues. This offers a simple but scalable and low-cost PaaS
+ transport for Celery users in Azure. The transport is intended to be
+ used in conjunction with the Azure Block Blob Storage backend.
+
+ Contributed by **Clemens Wolff**, **:github_user:`@ankurokok`**,
+ **Denis Kisselev**, **Evandro de Paula**, **Martin Peck**
+ and **:github_user:`@michaelperel`**
+
+- Added the Azure Service Bus transport.
+
+ The transport is implemented on top of Azure Service Bus and
+ offers PaaS support for more demanding Celery workloads in Azure.
+ The transport is intended to be used in conjunction with the Azure
+ CosmosDB backend.
+
+ Contributed by **Clemens Wolff**, **:github_user:`@ankurokok`**,
+ **Denis Kisselev**, **Evandro de Paula**, **Martin Peck**
+ and **:github_user:`@michaelperel`**
+
+- Drop remaining mentions of Jython support completely.
+
+ Contributed by **Asif Saif Uddin** and **Mads Jensen**
+
+- When publishing messages to the Pidbox, retry if an error occurs.
+
+ Contributed by **Asif Saif Uddin**
+
+- Fix infinite loop in :method:``kombu.asynchronous.hub.Hub.create_loop``.
+
+ Previous attempt to fix the problem (PR kombu/760) did not consider
+ an edge case. It is now fixed.
+
+ Contributed by **Vsevolod Strukchinsky**
+
+- Worker shutdown no longer duplicates messages when using the SQS broker.
+
+ Contributed by **Mintu Kumar Sah**
+
+- When using the SQS broker, prefer boto's default region before our hardcoded default.
+
+ Contributed by **Victor Villas**
+
+- Fixed closing of shared redis sockets which previously caused Celery to hang.
+
+ Contributed by **Alexey Popravka**
+
+- the `Pyro`_ transport (:mod:`kombu.transport.pyro`) now works with
+ recent Pyro versions. Also added a Pyro Kombu Broker that this transport
+ needs for its queues.
+
+ Contributed by **Irmen de Jong**
+
+- Handle non-base64-encoded SQS messages.
+
+ Fix contributed by **Tim Li**, **Asif Saif Uddin** and **Omer Katz**.
+
+- Move the handling of Sentinel failures to the redis library itself.
+
+ Previously, Redis Sentinel worked only if the first node's sentinel
+ service in the URI was up. A server outage would have caused downtime.
+
+ Contributed by **Brian Price**
+
+- When using Celery and the pickle serializer with binary data as part of the
+ payload, `UnicodeDecodeError` would be raised as the content was not utf-8.
+ We now replace on errors.
+
+ Contributed by **Jian Dai**
+
+- Allow setting :method:``boto3.sqs.create_queue`` Attributes via transport_options.
+
+ Contributed by **Hunter Fernandes**
+
+- Fixed infinite loop when entity.channel is replaced by revive() on connection
+ drop.
+
+ Contributed by **Tzach Yarimi**
+
+- Added optional support for Brotli compression.
+
+ Contributed by **Omer Katz**
+
+- When using the SQS broker, FIFO queues with names that ended with the 'f' letter
+ were incorrectly parsed. This is now fixed.
+
+ Contributed by **Alex Vishnya** and **Ilya Konstantinov**
+
+- Added optional support for LZMA compression.
+
+ Contributed by **Omer Katz**
+
+- Added optional support for ZStandard compression.
+
+ Contributed by **Omer Katz**
+
+- Require py-amqp 2.4.0 as the minimum version.
+
+ Contributed by **Asif Saif Uddin**
+
+- The value of DISABLE_TRACEBACKS environment variable is now respected on debug, info
+ and warning logger level.
+
+ Contributed by **Ludovic Rivallain**
+
+- As documented in kombu/#741 and eventlet/eventlet#415
+ there is a mismatch between the monkey-patched eventlet queue
+ and the interface Kombu is expecting.
+ This causes Celery to crash when the `broker_pool_limit`
+ configuration option is set
+ eventlet/eventlet#415 suggests that the mutex can be a noop.
+ This is now the case.
+
+ Contributed by **Josh Morrow**
+
+- Codebase improvements and fixes by:
+
+ - **Omer Katz**
+ - **Mads Jensen**
+ - **Asif Saif Uddin**
+ - **Lars Rinn**
+
+- Documentation improvements by:
+
+ - **Jon Dufresne**
+ - **Fay Cheng**
+ - **Asif Saif Uddin**
+ - **Kyle Verhoog**
+ - **Noah Hall**
+ - **:github_user:`brabiega`**
+
+.. _version-4.2.2-post1:
+
+4.2.2-post1
+===========
+:release-date: 2019-01-01 04:00 P.M IST
+:release-by: Omer Katz
+
+.. note::
+
+ The previous release contained code from master.
+ It is now deleted from PyPi.
+ Please use this release instead.
+
+- No changes since previous release.
+
+.. _version-4.2.2:
+
+4.2.2
+=====
+:release-date: 2018-12-06 04:30 P.M IST
+:release-by: Omer Katz
+
+- Support both Redis client version 2.x and version 3.x.
+
+ Contributed by **Ash Berlin-Taylor** and **Jeppe Fihl-Pearson**
+
+.. _version-4.2.1:
+
+4.2.1
+=====
+:release-date: 2018-05-21 09:00 A.M IST
+:release-by: Omer Katz
+
+.. note::
+
+ The 4.2.0 release contained remains of the ``async`` module by accident.
+ This is now fixed.
+
+- Handle librabbitmq fileno raising a ValueError when socket is not connected.
+
+ Contributed by **Bryan Shelton**
+
+.. _version-4.2.0:
+
+4.2.0
+=====
+:release-date: 2018-05-21 09:00 A.M IST
+:release-by: Omer Katz
+
+- Now passing ``max_retries``, ``interval_start``, ``interval_step``,
+ ``interval_max`` parameters from broker ``transport_options`` to
+ :meth:`~kombu.Connection.ensure_connection` when returning
+ :meth:`~kombu.Connection.default_connection` (Issue #765).
+
+ Contributed by **Anthony Lukach**.
+
+- Qpid: messages are now durable by default
+
+ Contributed by **David Davis**
+
+- Kombu now requires version 2.10.4 or greater of the redis library,
+ in line with Celery
+
+ Contributed by **Colin Jeanne**
+
+- Fixed ImportError in some environments with outdated simplejson
+
+ Contributed by **Aaron Morris**
+
+- MongoDB: fixed failure on MongoDB versions with an "-rc" tag
+
+ Contributed by **dust8**
+
+- Ensure periodic polling frequency does not exceed timeout in
+ virtual transport
+
+ Contributed by **Arcadiy Ivanov**
+
+- Fixed string handling when using python-future module
+
+ Contributed by **John Koehl"
+
+- Replaced "async" with "asynchronous" in preparation for Python 3.7
+
+ Contributed by **Thomas Achtemichuk**
+
+- Allow removing pool size limit when in use
+
+ Contributed by **Alex Hill**
+
+- Codebase improvements and fixes by:
+
+ - **j2gg0s**
+ - **Jon Dufresne**
+ - **Jonas Lergell**
+ - **Mads Jensen**
+ - **Nicolas Delaby**
+ - **Omer Katz**
+
+- Documentation improvements by:
+
+ - **Felix Yan**
+ - **Harry Moreno**
+ - **Mads Jensen**
+ - **Omer Katz**
+ - **Radha Krishna. S.**
+ - **Wojciech Matyśkiewicz**
+
+.. _version-4.1.0:
+
+4.1.0
+=====
+:release-date: 2017-07-17 04:45 P.M MST
+:release-by: Anthony Lukach
+
+- SQS: Added support for long-polling on all supported queries. Fixed bug
+ causing error on parsing responses with no retrieved messages from SQS.
+
+ Contributed by **Anthony Lukach**.
+
+- Async hub: Fixed potential infinite loop while performing todo tasks
+ (Issue celery/celery#3712).
+
+- Qpid: Fixed bug where messages could have duplicate ``delivery_tag``
+ (Issue #563).
+
+ Contributed by **bmbouter**.
+
+- MongoDB: Fixed problem with using ``readPreference`` option at pymongo 3.x.
+
+ Contributed by **Mikhail Elovskikh**.
+
+- Re-added support for :pypi:``SQLAlchemy``
+
+ Contributed by **Amin Ghadersohi**.
+
+- SQS: Fixed bug where hostname would default to ``localhost`` if not specified
+ in settings.
+
+ Contributed by **Anthony Lukach**.
+
+- Redis: Added support for reading password from transport URL (Issue #677).
+
+ Contributed by **George Psarakis**.
+
+- RabbitMQ: Ensured safer encoding of queue arguments.
+
+ Contributed by **Robert Kopaczewski**.
+
+- Added fallback to :func:``uuid.uuid5`` in :func:``generate_oid`` if
+ :func:``uuid.uuid3`` fails.
+
+ Contributed by **Bill Nottingham**.
+
+- Fixed race condition and innacurrate timeouts for
+ :class:``kombu.simple.SimpleBase`` (Issue #720).
+
+ Contributed by **c-nichols**.
+
+- Zookeeper: Fixed last chroot character trimming
+
+ Contributed by **Dima Kurguzov**.
+
+- RabbitMQ: Fixed bug causing an exception when attempting to close an
+ already-closed connection (Issue #690).
+
+ Contributed by **eavictor**.
+
+- Removed deprecated use of StopIteration in generators and invalid regex
+ escape sequence.
+
+ Contributed by **Jon Dufresne**.
+
+- Added Python 3.6 to CI testing.
+
+ Contributed by **Jon Dufresne**.
+
+- SQS: Allowed endpoint URL to be specified in the boto3 connection.
+
+ Contributed by **georgepsarakis**.
+
+- SQS: Added support for Python 3.4.
+
+ Contributed by **Anthony Lukach**.
+
+- SQS: ``kombu[sqs]`` now depends on :pypi:`boto3` (no longer using
+ :pypi:`boto)`.
+
+ - Adds support for Python 3.4+
+ - Adds support for FIFO queues (Issue #678) and (Issue celery/celery#3690)
+ - Avoids issues around a broken endpoints file (Issue celery/celery#3672)
+
+ Contributed by **Mischa Spiegelmock** and **Jerry Seutter**.
+
+- Zookeeper: Added support for delaying task with Python 3.
+
+ Contributed by **Dima Kurguzov**.
+
+- SQS: Fixed bug where :meth:`kombu.transport.SQS.drain_events` did not support
+ callback argument (Issue #694).
+
+ Contributed by **Michael Montgomery**.
+
+- Fixed bug around modifying dictionary size while iterating over it
+ (Issue #675).
+
+ Contributed by **Felix Yan**.
+
+- etcd: Added handling for :exc:`EtcdException` exception rather than
+ :exc:`EtcdError`.
+
+ Contributed by **Stephen Milner**.
+
+- Documentation improvements by:
+
+ - **Mads Jensen**
+ - **Matias Insaurralde**
+ - **Omer Katz**
+ - **Dmitry Dygalo**
+ - **Christopher Hoskin**
+
+.. _version-4.0.2:
+
+4.0.2
+=====
+:release-date: 2016-12-15 03:31 P.M PST
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 2.1.4
+
+ This new version takes advantage of TCP Keepalive settings on Linux,
+ making it better at detecting closed connections, also in failover
+ conditions.
+
+- Redis: Priority was reversed so, e.g. priority 0 became priority 9.
+
+.. _version-4.0.1:
+
+4.0.1
+=====
+:release-date: 2016-12-07 06:00 P.M PST
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 2.1.3
+
+ This new version takes advantage of the new ``TCP_USER_TIMEOUT`` socket option
+ on Linux.
+
+- Producer: Fixed performance degradation when default exchange specified
+ (Issue #651).
+
+- QPid: Switch to using getattr in qpid.Transport.__del__ (Issue #658)
+
+ Contributed by **Patrick Creech**.
+
+- QPid: Now uses monotonic time for timeouts.
+
+- MongoDB: Fixed compatibility with Python 3 (Issue #661).
+
+- Consumer: ``__exit__`` now skips cancelling consumer if connection-related
+ error raised (Issue #670).
+
+- MongoDB: Removes use of natural sort (Issue #638).
+
+ Contributed by **Anton Chaporgin**.
+
+- Fixed wrong keyword argument ``channel`` error (Issue #652).
+
+ Contributed by **Toomore Chiang**.
+
+- Safe argument to ``urllib.quote`` must be bytes on Python 2.x (Issue #645).
+
+- Documentation improvements by:
+
+ - **Carlos Edo**
+ - **Cemre Mengu**
+
+.. _version-4.0:
+
+4.0
+===
+:release-date: 2016-10-28 16:45 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 2.0.
+
+ The new py-amqp version have been refactored for better performance,
+ using modern Python socket conventions, and API consistency.
+
+- No longer depends on :mod:`anyjson`.
+
+ Kombu will now only choose between :pypi:`simplejson` and the built-in
+ :mod:`json`.
+
+ Using the latest version of simplejson is recommended:
+
+ .. code-block:: console
+
+ $ pip install -U simplejson
+
+- Removed transports that are no longer supported in this version:
+
+ - Django ORM transport
+ - SQLAlchemy ORM transport
+ - Beanstalk transport
+ - ZeroMQ transport
+ - amqplib transport (use pyamqp).
+
+- API Changes
+
+ * Signature of :class:`kombu.Message` now takes body as first argment.
+
+ It used to be ``Message(channel, body=body, **kw)``, but now it's
+ ``Message(body, channel=channel, **kw)``.
+
+ This is unlikey to affect you, as the Kombu API does not have
+ users instantiate messages manually.
+
+- New SQS transport
+
+ Donated by NextDoor, with additional contributions from mdk.
+
+ .. note::
+
+ ``kombu[sqs]`` now depends on :pypi:`pycurl`.
+
+- New Consul transport.
+
+ Contributed by **Wido den Hollander**.
+
+- New etcd transport.
+
+ Contributed by **Stephen Milner**.
+
+- New Qpid transport.
+
+ It was introduced as an experimental transport in Kombu 3.0, but is now
+ mature enough to be fully supported.
+
+ Created and maintained by **Brian Bouterse**.
+
+- Redis: Priority 0 is now lowest, 9 is highest.
+ (**backward incompatible**)
+
+ This to match how priorities in AMQP works.
+
+ Fix contributed by **Alex Koshelev**.
+
+- Redis: Support for Sentinel
+
+ You can point the connection to a list of sentinel URLs like:
+
+ .. code-block:: text
+
+ sentinel://0.0.0.0:26379;sentinel://0.0.0.0:26380/...
+
+ where each sentinel is separated by a `;`. Multiple sentinels are handled
+ by :class:`kombu.Connection` constructor, and placed in the alternative
+ list of servers to connect to in case of connection failure.
+
+ Contributed by **Sergey Azovskov**, and **Lorenzo Mancini**
+
+- RabbitMQ Queue Extensions
+
+ New arguments have been added to :class:`kombu.Queue` that lets
+ you directly and conveniently configure the RabbitMQ queue extensions.
+
+ - ``Queue(expires=20.0)``
+
+ Set queue expiry time in float seconds.
+
+ See :attr:`kombu.Queue.expires`.
+
+ - ``Queue(message_ttl=30.0)``
+
+ Set queue message time-to-live float seconds.
+
+ See :attr:`kombu.Queue.message_ttl`.
+
+ - ``Queue(max_length=1000)``
+
+ Set queue max length (number of messages) as int.
+
+ See :attr:`kombu.Queue.max_length`.
+
+ - ``Queue(max_length_bytes=1000)``
+
+ Set queue max length (message size total in bytes) as int.
+
+ See :attr:`kombu.Queue.max_length_bytes`.
+
+ - ``Queue(max_priority=10)``
+
+ Declare queue to be a priority queue that routes messages
+ based on the ``priority`` field of the message.
+
+ See :attr:`kombu.Queue.max_priority`.
+
+- RabbitMQ: ``Message.ack`` now supports the ``multiple`` argument.
+
+ If multiple is set to True, then all messages received before
+ the message being acked will also be acknowledged.
+
+- ``amqps://`` can now be specified to require SSL (Issue #610).
+
+- ``Consumer.cancel_by_queue`` is now constant time.
+
+- ``Connection.ensure*`` now raises :exc:`kombu.exceptions.OperationalError`.
+
+ Things that can be retried are now reraised as
+ :exc:`kombu.exceptions.OperationalError`.
+
+- Redis: Fixed SSL support.
+
+ Contributed by **Robert Kolba**.
+
+- New ``Queue.consumer_arguments`` can be used for the ability to
+ set consumer priority via ``x-priority``.
+
+ See https://www.rabbitmq.com/consumer-priority.html
+
+ Example:
+
+ .. code-block:: python
+
+ Queue(
+ 'qname',
+ exchange=Exchange('exchange'),
+ routing_key='qname',
+ consumer_arguments={'x-priority': 3},
+ )
+
+- Queue/Exchange: ``no_declare`` option added (also enabled for
+ internal amq. exchanges) (Issue #565).
+
+- JSON serializer now calls ``obj.__json__`` for unsupported types.
+
+ This means you can now define a ``__json__`` method for custom
+ types that can be reduced down to a built-in json type.
+
+ Example:
+
+ .. code-block:: python
+
+ class Person:
+ first_name = None
+ last_name = None
+ address = None
+
+ def __json__(self):
+ return {
+ 'first_name': self.first_name,
+ 'last_name': self.last_name,
+ 'address': self.address,
+ }
+
+- JSON serializer now handles datetimes, Django promise, UUID and Decimal.
+
+- Beanstalk: Priority 0 is now lowest, 9 is highest.
+ (**backward incompatible**)
+
+ This to match how priorities in AMQP works.
+
+ Fix contributed by **Alex Koshelev**.
+
+- Redis: now supports SSL using the ``ssl`` argument to
+ :class:`~kombu.Connection`.
+
+- Redis: Fanout exchanges are no longer visible between vhosts,
+ and fanout messages can be filtered by patterns.
+ (**backward incompatible**)
+
+ It was possible to enable this mode previously using the
+ ``fanout_prefix``, and ``fanout_patterns``
+ transport options, but now these are enabled by default.
+
+ If you want to mix and match producers/consumers running different
+ versions you need to configure your kombu 3.x clients to also enable
+ these options:
+
+ .. code-block:: pycon
+
+ >>> Connection(transport_options={
+ 'fanout_prefix': True,
+ 'fanout_patterns': True,
+ })
+
+- Pidbox: Mailbox new arguments: TTL and expiry.
+
+ Mailbox now supports new arguments for controlling
+ message TTLs and queue expiry, both for the mailbox
+ queue and for reply queues.
+
+ - ``queue_expires`` (float/int seconds).
+ - ``queue_ttl`` (float/int seconds).
+ - ``reply_queue_expires`` (float/int seconds).
+ - ``reply_queue_ttl`` (float/int seconds).
+
+ All take seconds in int/float.
+
+ Contributed by **Alan Justino**.
+
+- Exchange.delivery_mode now defaults to :const:`None`, and the default
+ is instead set by ``Producer.publish``.
+
+- :class:`~kombu.Consumer` now supports a new ``prefetch_count`` argument,
+ which if provided will force the consumer to set an initial prefetch count
+ just before starting.
+
+- Virtual transports now stores ``priority`` as a property, not in
+ ``delivery_info``, to be compatible with AMQP.
+
+- ``reply_to`` argument to ``Producer.publish`` can now be
+ :class:`~kombu.Queue` instance.
+
+- Connection: There's now a new method
+ ``Connection.supports_exchange_type(type)`` that can be used to check if the
+ current transport supports a specific exchange type.
+
+- SQS: Consumers can now read json messages not sent by Kombu.
+
+ Contributed by **Juan Carlos Ferrer**.
+
+- SQS: Will now log the access key used when authentication fails.
+
+ Contributed by **Hank John**.
+
+- Added new :class:`kombu.mixins.ConsumerProducerMixin` for consumers that
+ will also publish messages on a separate connection.
+
+- Messages: Now have a more descriptive ``repr``.
+
+ Contributed by **Joshua Harlow**.
+
+- Async: HTTP client based on curl.
+
+- Async: Now uses `poll` instead of `select` where available.
+
+- MongoDB: Now supports priorities
+
+ Contributed by **Alex Koshelev**.
+
+- Virtual transports now supports multiple queue bindings.
+
+ Contributed by **Federico Ficarelli**.
+
+- Virtual transports now supports the anon exchange.
+
+ If when publishing a message, the exchange argument is set to '' (empty
+ string), the routing_key will be regarded as the destination queue.
+
+ This will bypass the routing table compeltely, and just deliver the
+ message to the queue name specified in the routing key.
+
+- Zookeeper: Transport now uses the built-in suport in kazoo to handle
+ failover when using a list of server names.
+
+ Contributed by **Joshua Harlow**.
+
+- ConsumerMixin.run now passes keyword arguments to .consume.
+
+Deprecations and removals
+-------------------------
+
+- The deprecated method ``Consumer.add_queue_from_dict`` has been removed.
+
+ Use instead:
+
+ .. code-block:: python
+
+ consumer.add_queue(Queue.from_dict(queue_name, **options))
+
+- The deprecated function ``kombu.serialization.encode`` has been removed.
+
+ Use :func:`kombu.serialization.dumps` instead.
+
+- The deprecated function ``kombu.serialization.decode`` has been removed.
+
+ Use :func:`kombu.serialization.loads` instead.
+
+- Removed module ``kombu.syn``
+
+ ``detect_environment`` has been moved to kombu.utils.compat
+
+.. _version-3.0.37:
+
+3.0.37
+======
+:release-date: 2016-10-06 05:00 P.M PDT
+:release-by: Ask Solem
+
+- Connection: Return value of ``.info()`` was no longer JSON serializable,
+ leading to "itertools.cycle object not JSON serializable"
+ errors (Issue #635).
+
+.. _version-3.0.36:
+
+3.0.36
+======
+:release-date: 2016-09-30 03:06 P.M PDT
+:release-by: Ask Solem
+
+- Connection: Fixed bug when cloning connection with alternate urls.
+
+ Fix contributed by Emmanuel Cazenave.
+
+- Redis: Fixed problem with unix socket connections.
+
+ https://github.com/celery/celery/issues/2903
+
+ Fix contributed by Raphael Michel.
+
+- Redis: Fixed compatibility with older redis-py versions (Issue #576).
+
+- Broadcast now retains queue name when being copied/pickled (Issue #578).
+
+.. _version-3.0.35:
+
+3.0.35
+======
+:release-date: 2016-03-22 11:22 P.M PST
+:release-by: Ask Solem
+
+- msgpack: msgpack support now requires msgpack-python > 0.4.7.
+
+- Redis: TimeoutError was no longer handled as a recoverable error.
+
+- Redis: Adds the ability to set more Redis connection options
+ using ``Connection(transport_options={...})``.
+
+ - ``socket_connect_timeout``
+ - ``socket_keepalive`` (requires :mod:`redis-py` > 2.10)
+ - ``socket_keepalive_options`` (requires :mod:`redis-py` > 2.10)
+
+- msgpack: Fixes support for binary/unicode data
+
+.. _version-3.0.34:
+
+3.0.34
+======
+:release-date: 2016-03-03 05:30 P.M PST
+:release-by: Ask Solem
+
+- Qpid: Adds async error handling.
+
+ Contributed by Brian Bouterse.
+
+- Qpid: Delivery tag is now a UUID4 (Issue #563).
+
+ Fix contributed by Brian Bouterse.
+
+- Redis: Connection.as_uri() returned malformed URLs when the
+ ``redis+socket`` scheme was ised (Issue celery/celery#2995).
+
+- msgpack: Use binary encoding instead of utf-8 (Issue #570).
+
+.. _version-3.0.33:
+
+3.0.33
+======
+:release-date: 2016-01-08 06:36 P.M PST
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 1.4.9.
+
+- Redis: Fixed problem with auxilliary connections causing the main
+ consumer connection to be closed (Issue #550).
+
+- Qpid: No longer uses threads to operate, to ensure compatibility with
+ all environments (Issue #531).
+
+.. _version-3.0.32:
+
+3.0.32
+======
+:release-date: 2015-12-16 02:29 P.M PST
+:release-by: Ask Solem
+
+- Redis: Fixed bug introduced in 3.0.31 where the redis transport always
+ connects to localhost, regardless of host setting.
+
+.. _version-3.0.31:
+
+3.0.31
+======
+:release-date: 2015-12-16 12:00 P.M PST
+:release-by: Ask Solem
+
+- Redis: Fixed bug introduced in 3.0.30 where socket was prematurely
+ disconnected.
+
+- Hub: Removed debug logging message: "Deregistered fd..." (Issue #549).
+
+.. _version-3.0.30:
+
+3.0.30
+======
+:release-date: 2015-12-07 12:28 A.M PST
+:release-by: Ask Solem
+
+- Fixes compatiblity with uuid in Python 2.7.11 and 3.5.1.
+
+ Fix contributed by Kai Groner.
+
+- Redis transport: Attempt at fixing problem with hanging consumer
+ after disconnected from server.
+
+- Event loop:
+ Attempt at fixing issue with 100% CPU when using the Redis transport,
+
+- Database transport: Fixed oracle compatiblity.
+
+ An "ORA-00907: missing right parenthesis" error could manifest when using
+ an Oracle database with the database transport.
+
+ Fix contributed by Deepak N.
+
+- Documentation fixes
+
+ Contributed by Tommaso Barbugli.
+
+.. _version-3.0.29:
+
+3.0.29
+======
+:release-date: 2015-10-26 11:10 A.M PDT
+:release-by: Ask Solem
+
+- Fixed serialization issue for ``bindings.as_dict()`` (Issue #453).
+
+ Fix contributed by Sergey Tikhonov.
+
+- Json serializer wrongly treated bytes as ``ascii``, not ``utf-8``
+ (Issue #532).
+
+- MongoDB: Now supports pymongo 3.x.
+
+ Contributed by Len Buckens.
+
+- SQS: Tests passing on Python 3.
+
+ Fix contributed by Felix Yan
+
+.. _version-3.0.28:
+
+3.0.28
+======
+:release-date: 2015-10-12 12:00 PM PDT
+:release-by: Ask Solem
+
+.. admonition:: Django transport migrations.
+
+ If you're using Django 1.8 and have already created the
+ kombu_transport_django tables, you have to run a fake initial migration:
+
+ .. code-block:: console
+
+ $ python manage.py migrate kombu_transport_django --fake-initial
+
+- No longer compatible with South by default.
+
+ To keep using kombu.transport.django with South migrations
+ you now need to configure a new location for the kombu migrations:
+
+ .. code-block:: python
+
+ SOUTH_MIGRATION_MODULES = {
+ 'kombu_transport_django':
+ 'kombu.transport.django.south_migrations',
+ }
+
+- Keep old South migrations in ``kombu.transport.django.south_migrations``.
+
+- Now works with Redis < 2.10 again.
+
+.. _version-3.0.27:
+
+3.0.27
+======
+:release-date: 2015-10-09 3:10 PM PDT
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 1.4.7.
+
+- Fixed libSystem import error on some macOS 10.11 (El Capitan) installations.
+
+ Fix contributed by Eric Wang.
+
+- Now compatible with Django 1.9.
+
+- Django: Adds migrations for the database transport.
+
+- Redis: Now depends on py-redis 2.10.0 or later (Issue #468).
+
+- QPid: Can now connect as localhost (Issue #519).
+
+ Fix contributed by Brian Bouterse.
+
+- QPid: Adds support for ``login_method`` (Issue #502, Issue #499).
+
+ Contributed by Brian Bouterse.
+
+- QPid: Now reads SASL mechanism from broker string (Issue #498).
+
+ Fix contributed by Brian Bouterse.
+
+- QPid: Monitor thread now properly terminated on session close (Issue #485).
+
+ Fix contributed by Brian Bouterse.
+
+- QPid: Fixed file descriptor leak (Issue #476).
+
+ Fix contributed by Jeff Ortel
+
+- Docs: Fixed wrong order for entrypoint arguments (Issue #473).
+
+- ConsumerMixin: Connection error logs now include traceback (Issue #480).
+
+- BaseTransport now raises RecoverableConnectionError when disconnected
+ (Issue #507).
+
+- Consumer: Adds ``tag_prefix`` option to modify how consumer tags are
+ generated (Issue #509).
+
+.. _version-3.0.26:
+
+3.0.26
+======
+:release-date: 2015-04-22 06:00 P.M UTC
+:release-by: Ask Solem
+
+- Fixed compatibility with py-redis versions before 2.10.3 (Issue #470).
+
+.. _version-3.0.25:
+
+3.0.25
+======
+:release-date: 2015-04-21 02:00 P.M UTC
+:release-by: Ask Solem
+
+- pyamqp/librabbitmq now uses 5671 as default port when SSL is enabled
+ (Issue #459).
+
+- Redis: Now supports passwords in ``redis+socket://:pass@host:port`` URLs
+ (Issue #460).
+
+- ``Producer.publish`` now defines the ``expiration`` property in support
+ of the `RabbitMQ per-message TTL extension`_.
+
+ Contributed by Anastasis Andronidis.
+
+- Connection transport attribute now set correctly for all transports.
+
+ Contributed by Alex Koshelev.
+
+- qpid: Fixed bug where the connectionw as not being closed properly.
+
+ Contributed by Brian Bouterse.
+
+- :class:`~kombu.entity.bindings` is now JSON serializable (Issue #453).
+
+ Contributed by Sergey Tikhonov.
+
+- Fixed typo in error when yaml is not installed (said ``msgpack``).
+
+ Contributed by Joshua Harlow.
+
+- Redis: Now properly handles :exc:`redis.exceptions.TimeoutError`
+ raised by :mod:`redis`.
+
+ Contributed by markow.
+
+- qpid: Adds additional string to check for when connecting to qpid.
+
+ When we connect to qpid, we need to ensure that we skip to the next SASL
+ mechanism if the current mechanism fails. Otherwise, we will keep retrying the
+ connection with a non-working mech.
+
+ Contributed by Chris Duryee.
+
+- qpid: Handle ``NotFound`` exceptions.
+
+ Contributed by Brian Bouterse.
+
+- :class:`Queue.__repr__` now makes sure return value is not unicode
+ (Issue #440).
+
+- qpid: ``Queue.purge`` incorrectly raised :exc:`AttributeErrror` if the
+ does not exist (Issue #439).
+
+ Contributed by Brian Bouterse.
+
+- Linux: Now ignores permission errors on epoll unregister.
+
+.. _`RabbitMQ per-message TTL extension`: https://www.rabbitmq.com/ttl.html
+
+.. _version-3.0.24:
+
+3.0.24
+======
+:release-date: 2014-11-17 11:00 P.M UTC
+:release-by: Ask Solem
+
+- The `Qpid <http://qpid.apache.org/>`_ broker is supported for Python 2.x
+ environments. The Qpid transport includes full SSL support within Kombu. See
+ the :mod:`kombu.transport.qpid` docs for more info.
+
+ Contributed by Brian Bouterse and Chris Duryee through support from Red Hat.
+
+- Dependencies: extra[librabbitmq] now requires librabbitmq 1.6.0
+
+- Docstrings for :class:`~kombu.utils.limit.TokenBucket` did not match
+ implementation.
+
+ Fix contributed by Jesse Dhillon.
+
+- :func:`~kombu.common.oid_from` accidentally called ``uuid.getnode()`` but
+ did not use the return value.
+
+ Fix contributed by Alexander Todorov.
+
+- Redis: Now ignores errors when cosing the underlying connection.
+
+- Redis: Restoring messages will now use a single connection.
+
+- ``kombu.five.monotonic``: Can now be imported even if ctypes is not
+ available for some reason (e.g. App Engine)
+
+- Documentation: Improved example to use the ``declare`` argument to
+ ``Producer`` (Issue #423).
+
+- Django: Fixed ``app_label`` for older Django versions (``< 1.7``).
+ (Issue #414).
+
+.. _version-3.0.23:
+
+3.0.23
+======
+:release-date: 2014-09-14 10:45 P.M UTC
+:release-by: Ask Solem
+
+- Django: Fixed bug in the Django 1.7 compatibility improvements related
+ to autocommit handling.
+
+ Contributed by Radek Czajka.
+
+- Django: The Django transport models would not be created on syncdb
+ after app label rename (Issue #406).
+
+.. _version-3.0.22:
+
+3.0.22
+======
+:release-date: 2014-09-04 03:00 P.M UTC
+:release-by: Ask Solem
+
+- kombu.async: Min. delay between waiting for timer was always increased to
+ one second.
+
+- Fixed bug in itermessages where message is received after the with
+ statement exits the block.
+
+ Fixed by Rumyana Neykova
+
+- Connection.autoretry: Now works with functions missing wrapped attributes
+ (``__module__``, ``__name__``, ``__doc__``). Fixes #392.
+
+ Contributed by johtso.
+
+- Django: Now sets custom app label for ``kombu.transport.django`` to work
+ with recent changes in Django 1.7.
+
+- SimpleQueue removed messages from the wrong end of buffer (Issue #380).
+
+- Tests: Now using ``unittest.mock`` if available (Issue #381).
+
+.. _version-3.0.21:
+
+3.0.21
+======
+:release-date: 2014-07-07 02:00 P.M UTC
+:release-by: Ask Solem
+
+- Fixed remaining bug in ``maybe_declare`` for ``auto_delete`` exchanges.
+
+ Fix contributed by Roger Hu.
+
+- MongoDB: Creating a channel now properly evaluates a connection (Issue #363).
+
+ Fix contributed by Len Buckens.
+
+.. _version-3.0.20:
+
+3.0.20
+======
+:release-date: 2014-06-24 02:30 P.M UTC
+:release-by: Ask Solem
+
+- Reverts change in 3.0.17 where ``maybe_declare`` caches the declaration
+ of auto_delete queues and exchanges.
+
+ Fix contributed by Roger Hu.
+
+- Redis: Fixed race condition when using gevent and the channel is closed.
+
+ Fix contributed by Andrew Rodionoff.
+
+.. _version-3.0.19:
+
+3.0.19
+======
+:release-date: 2014-06-09 03:10 P.M UTC
+:release-by: Ask Solem
+
+- The wheel distribution did not support Python 2.6 by failing to list
+ the extra dependencies required.
+
+- Durable and auto_delete queues/exchanges can be be cached using
+ ``maybe_declare``.
+
+.. _version-3.0.18:
+
+3.0.18
+======
+:release-date: 2014-06-02 06:00 P.M UTC
+:release-by: Ask Solem
+
+- A typo introduced in 3.0.17 caused kombu.async.hub to crash (Issue #360).
+
+.. _version-3.0.17:
+
+3.0.17
+======
+:release-date: 2014-06-02 05:00 P.M UTC
+:release-by: Ask Solem
+
+- ``kombu[librabbitmq]`` now depends on librabbitmq 1.5.2.
+
+- Async: Event loop now selectively removes file descriptors for the mode
+ it failed in, and keeps others (e.g read vs write).
+
+ Fix contributed by Roger Hu.
+
+- CouchDB: Now works without userid set.
+
+ Fix contributed by Latitia M. Haskins.
+
+- SQLAlchemy: Now supports recovery from connection errors.
+
+ Contributed by Felix Schwarz.
+
+- Redis: Restore at shutdown now works when ack emulation is disabled.
+
+- :func:`kombu.common.eventloop` accidentally swallowed socket errors.
+
+- Adds :func:`kombu.utils.url.sanitize_url`
+
+.. _version-3.0.16:
+
+3.0.16
+======
+:release-date: 2014-05-06 01:00 P.M UTC
+:release-by: Ask Solem
+
+- ``kombu[librabbitmq]`` now depends on librabbitmq 1.5.1.
+
+- Redis: Fixes ``TypeError`` problem in ``unregister`` (Issue #342).
+
+ Fix contributed by Tobias Schottdorf.
+
+- Tests: Some unit tests accidentally required the `redis-py` library.
+
+ Fix contributed by Randy Barlow.
+
+- librabbitmq: Would crash when using an older version of :mod:`librabbitmq`,
+ now emits warning instead.
+
+.. _version-3.0.15:
+
+3.0.15
+======
+:release-date: 2014-04-15 09:00 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 1.4.5.
+
+- RabbitMQ 3.3 changes QoS semantics (Issue #339).
+
+ See the RabbitMQ release notes here:
+ http://www.rabbitmq.com/blog/2014/04/02/breaking-things-with-rabbitmq-3-3/
+
+ A new connection property has been added that can be used to detect
+ whether the remote server is using this new QoS behavior:
+
+ .. code-block:: pycon
+
+ >>> Connection('amqp://').qos_behavior_matches_spec
+ False
+
+ so if your application depends on the old semantics you can
+ use this to set the ``apply_global`` flag appropriately:
+
+ .. code-block:: python
+
+ def update_prefetch_count(channel, new_value):
+ channel.basic_qos(
+ 0, new_value,
+ not channel.connection.client.qos_behavior_matches_spec,
+ )
+
+- Users of :mod:`librabbitmq` is encouraged to upgrade to librabbitmq 1.5.0.
+
+ The ``kombu[librabbitmq]`` extra has been updated to depend on this
+ version.
+
+- Pools: Now takes transport options into account when comparing connections
+ (Issue #333).
+
+- MongoDB: Fixes Python 3 compatibility.
+
+- Async: select: Ignore socket errors when attempting to unregister handles
+ from the loop.
+
+- Pidbox: Can now be configured to use a serializer other than json,
+ but specifying a serializer argument to :class:`~kombu.pidbox.Mailbox`.
+
+ Contributed by Dmitry Malinovsky.
+
+- Message decompression now works with Python 3.
+
+ Fix contributed by Adam Gaca.
+
+.. _version-3.0.14:
+
+3.0.14
+======
+:release-date: 2014-03-19 07:00 P.M UTC
+:release-by: Ask Solem
+
+- **MongoDB**: Now endures a connection failover (Issue #123).
+
+ Fix contributed by Alex Koshelev.
+
+- **MongoDB**: Fixed ``KeyError`` when a replica set member is removed.
+
+ Also fixes celery#971 and celery/#898.
+
+ Fix contributed by Alex Koshelev.
+
+- **MongoDB**: Fixed MongoDB broadcast cursor re-initialization bug.
+
+ Fix contributed by Alex Koshelev.
+
+- **Async**: Fixed bug in lax semaphore implementation where in
+ some usage patterns the limit was not honored correctly.
+
+ Fix contributed by Ionel Cristian Mărieș.
+
+- **Redis**: Fixed problem with fanout when using Python 3 (Issue #324).
+
+- **Redis**: Fixed ``AttributeError`` from attempting to close a non-existing
+ connection (Issue #320).
+
+.. _version-3.0.13:
+
+3.0.13
+======
+:release-date: 2014-03-03 04:00 P.M UTC
+:release-by: Ask Solem
+
+- Redis: Fixed serious race condition that could lead to data loss.
+
+ The delivery tags were accidentally set to be an incremental number
+ local to the channel, but the delivery tags need to be globally
+ unique so that a message can not overwrite an older message
+ in the backup store.
+
+ This change is not backwards incompatible and you are encouraged
+ to update all your system using a previous version as soon as possible.
+
+- Now depends on :mod:`amqp` 1.4.4.
+
+- Pidbox: Now makes sure message encoding errors are handled by default,
+ so that a custom error handler does not need to be specified.
+
+- Redis: The fanout exchange can now use AMQP patterns to route and filter
+ messages.
+
+ This change is backwards incompatible and must be enabled with
+ the ``fanout_patterns`` transport option:
+
+ .. code-block:: pycon
+
+ >>> conn = kombu.Connection('redis://', transport_options={
+ ... 'fanout_patterns': True,
+ ... })
+
+ When enabled the exchange will work like an amqp topic exchange
+ if the binding key is a pattern.
+
+ This is planned to be default behavior in the future.
+
+- Redis: Fixed ``cycle`` no such attribute error.
+
+.. _version-3.0.12:
+
+3.0.12
+======
+:release-date: 2014-02-09 03:50 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 1.4.3.
+
+- Fixes Python 3.4 logging incompatibility (Issue #311).
+
+- Redis: Now properly handles unknown pub/sub messages.
+
+ Fix contributed by Sam Stavinoha.
+
+- amqplib: Fixed bug where more bytes were requested from the socket
+ than necessary.
+
+ Fix contributed by Ionel Cristian Mărieș.
+
+.. _version-3.0.11:
+
+3.0.11
+======
+:release-date: 2014-02-03 05:00 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 1.4.2.
+
+- Now always trusts messages of type `application/data` and `application/text`
+ or which have an unspecified content type (Issue #306).
+
+- Compression errors are now handled as decode errors and will trigger
+ the ``Consumer.on_decode_error`` callback if specified.
+
+- New ``kombu.Connection.get_heartbeat_interval()`` method that can be
+ used to access the negotiated heartbeat value.
+
+- `kombu.common.oid_for` no longer uses the MAC address of the host, but
+ instead uses a process-wide UUID4 as a node id.
+
+ This avoids a call to `uuid.getnode()` at module scope.
+
+- Hub.add: Now normalizes registered fileno.
+
+ Contributed by Ionel Cristian Mărieș.
+
+- SQS: Fixed bug where the prefetch count limit was not respected.
+
+.. _version-3.0.10:
+
+3.0.10
+======
+:release-date: 2014-01-17 05:40 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 1.4.1.
+
+- ``maybe_declare`` now raises a "recoverable connection error" if
+ the channel is disconnected instead of a :exc:`ChannelError` so that
+ the operation can be retried.
+
+- Redis: ``Consumer.cancel()`` is now thread safe.
+
+ This fixes an issue when using gevent/eventlet and a
+ message is handled after the consumer is canceled resulting
+ in a "message for queue without consumers" error.
+
+- Retry operations would not always respect the interval_start
+ value when calculating the time to sleep for (Issue #303).
+
+ Fix contributed by Antoine Legrand.
+
+- Timer: Fixed "unhashable type" error on Python 3.
+
+- Hub: Do not attempt to unregister operations on an already closed
+ poller instance.
+
+.. _version-3.0.9:
+
+3.0.9
+=====
+:release-date: 2014-01-13 05:30 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 1.4.0.
+
+- Redis: Basic cancel for fanout based queues now sends a corresponding
+ ``UNSUBSCRIBE`` command to the server.
+
+ This fixes an issue with pidbox where reply messages could be received
+ after the consumer was canceled, giving the ``"message to queue without
+ consumers"`` error.
+
+- MongoDB: Improved connection string and options handling
+ (Issue #266 + Issue #120).
+
+ Contributed by Alex Koshelev.
+
+- SQS: Limit the number of messages when receiving in batch to 10.
+
+ This is a hard limit enforced by Amazon so the sqs transport
+ must not exceeed this value.
+
+ Fix contributed by Eric Reynolds.
+
+- ConsumerMixin: ``consume`` now checks heartbeat every time the
+ socket times out.
+
+ Contributed by Dustin J. Mitchell.
+
+- Retry Policy: A max retries of 0 did not retry forever.
+
+ Fix contributed by Antoine Legrand.
+
+- Simple: If passing a Queue object the simple utils will now take
+ default routing key from that queue.
+
+ Contributed by Fernando Jorge Mota.
+
+- ``repr(producer)`` no longer evaluates the underlying channnel.
+
+- Redis: The map of Redis error classes are now exposed at the module level
+ using the :func:`kombu.transport.redis.get_redis_error_classes` function.
+
+- Async: ``Hub.close`` now sets ``.poller`` to None.
+
+.. _version-3.0.8:
+
+3.0.8
+=====
+:release-date: 2013-12-16 05:00 P.M UTC
+:release-by: Ask Solem
+
+- Serializer: loads and dumps now wraps exceptions raised into
+ :exc:`~kombu.exceptions.DecodeError` and
+ :exc:`kombu.exceptions.EncodeError` respectively.
+
+ Contributed by Ionel Cristian Maries
+
+- Redis: Would attempt to read from the wrong connection if a select/epoll/kqueue
+ exception event happened.
+
+ Fix contributed by Michael Nelson.
+
+- Redis: Disabling ack emulation now works properly.
+
+ Fix contributed by Michael Nelson.
+
+- Redis: :exc:`IOError` and :exc:`OSError` are now treated as recoverable
+ connection errors.
+
+- SQS: Improved performance by reading messages in bulk.
+
+ Contributed by Matt Wise.
+
+- Connection Pool: Attempting to acquire from a closed pool will now
+ raise :class:`RuntimeError`.
+
+.. _version-3.0.7:
+
+3.0.7
+=====
+:release-date: 2013-12-02 04:00 P.M UTC
+:release-by: Ask Solem
+
+- Fixes Python 2.6 compatibility.
+
+- Redis: Fixes 'bad file descriptor' issue.
+
+.. _version-3.0.6:
+
+3.0.6
+=====
+:release-date: 2013-11-21 04:50 P.M UTC
+:release-by: Ask Solem
+
+- Timer: No longer attempts to hash keyword arguments (Issue #275).
+
+- Async: Did not account for the long type for file descriptors.
+
+ Fix contributed by Fabrice Rabaute.
+
+- PyPy: kqueue support was broken.
+
+- Redis: Bad pub/sub payloads no longer crashes the consumer.
+
+- Redis: Unix socket URLs can now specify a virtual host by including
+ it as a query parameter.
+
+ Example URL specifying a virtual host using database number 3:
+
+ .. code-block:: text
+
+ redis+socket:///tmp/redis.sock?virtual_host=3
+
+- ``kombu.VERSION`` is now a named tuple.
+
+.. _version-3.0.5:
+
+3.0.5
+=====
+:release-date: 2013-11-15 11:00 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 1.3.3.
+
+- Redis: Fixed Python 3 compatibility problem (Issue #270).
+
+- MongoDB: Fixed problem with URL parsing when authentication used.
+
+ Fix contributed by dongweiming.
+
+- pyamqp: Fixed small issue when publishing the message and
+ the property dictionary was set to None.
+
+ Fix contributed by Victor Garcia.
+
+- Fixed problem in ``repr(LaxBoundedSemaphore)``.
+
+ Fix contributed by Antoine Legrand.
+
+- Tests now passing on Python 3.3.
+
+.. _version-3.0.4:
+
+3.0.4
+=====
+:release-date: 2013-11-08 01:00 P.M UTC
+:release-by: Ask Solem
+
+- common.QoS: ``decrement_eventually`` now makes sure the value
+ does not go below 1 if a prefetch count is enabled.
+
+.. _version-3.0.3:
+
+3.0.3
+=====
+:release-date: 2013-11-04 03:00 P.M UTC
+:release-by: Ask Solem
+
+- SQS: Properly reverted patch that caused delays between messages.
+
+ Contributed by James Saryerwinnie
+
+- select: Clear all registerd fds on poller.cloe
+
+- Eventloop: unregister if EBADF raised.
+
+.. _version-3.0.2:
+
+3.0.2
+=====
+:release-date: 2013-10-29 02:00 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` version 1.3.2.
+
+- select: Fixed problem where unregister did not properly remove
+ the fd.
+
+.. _version-3.0.1:
+
+3.0.1
+=====
+:release-date: 2013-10-24 04:00 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` version 1.3.1.
+
+- Redis: New option ``fanout_keyprefix``
+
+ This transport option is recommended for all users as it ensures
+ that broadcast (fanout) messages sent is only seen by the current
+ virtual host:
+
+ .. code-block:: python
+
+ Connection('redis://', transport_options={'fanout_keyprefix': True})
+
+ However, enabling this means that you cannot send or receive messages
+ from older Kombu versions so make sure all of your participants
+ are upgraded and have the transport option enabled.
+
+ This will be the default behavior in Kombu 4.0.
+
+- Distribution: Removed file ``requirements/py25.txt``.
+
+- MongoDB: Now disables ``auto_start_request``.
+
+- MongoDB: Enables ``use_greenlets`` if eventlet/gevent used.
+
+- Pidbox: Fixes problem where expires header was None,
+ which is a value not supported by the amq protocol.
+
+- ConsumerMixin: New ``consumer_context`` method for starting
+ the consumer without draining events.
+
+.. _version-3.0.0:
+
+3.0.0
+=====
+:release-date: 2013-10-14 04:00 P.M BST
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` version 1.3.
+
+- No longer supports Python 2.5
+
+ The minimum Python version supported is now Python 2.6.0 for Python 2,
+ and Python 3.3 for Python 3.
+
+- Dual codebase supporting both Python 2 and 3.
+
+ No longer using ``2to3``, making it easier to maintain support for
+ both versions.
+
+- pickle, yaml and msgpack deserialization is now disabled by default.
+
+ This means that Kombu will by default refuse to handle any content type other
+ than json.
+
+ Pickle is known to be a security concern as it will happily
+ load any object that is embedded in a pickle payload, and payloads
+ can be crafted to do almost anything you want. The default
+ serializer in Kombu is json but it also supports a number
+ of other serialization formats that it will evaluate if received:
+ including pickle.
+
+ It was always assumed that users were educated about the security
+ implications of pickle, but in hindsight we don't think users
+ should be expected to secure their services if we have the ability to
+ be secure by default.
+
+ By disabling any content type that the user did not explicitly
+ want enabled we ensure that the user must be conscious when they
+ add pickle as a serialization format to support.
+
+ The other built-in serializers (yaml and msgpack) are also disabled
+ even though they aren't considered insecure [#f1]_ at this point.
+ Instead they're disabled so that if a security flaw is found in one of these
+ libraries in the future, you will only be affected if you have
+ explicitly enabled them.
+
+ To have your consumer accept formats other than json you have to
+ explicitly add the wanted formats to a white-list of accepted
+ content types:
+
+ .. code-block:: pycon
+
+ >>> c = Consumer(conn, accept=['json', 'pickle', 'msgpack'])
+
+ or when using synchronous access:
+
+ .. code-block:: pycon
+
+ >>> msg = queue.get(accept=['json', 'pickle', 'msgpack'])
+
+ The ``accept`` argument was first supported for consumers in version
+ 2.5.10, and first supported by ``Queue.get`` in version 2.5.15
+ so to stay compatible with previous versions you can enable
+ the previous behavior:
+
+ >>> from kombu import enable_insecure_serializers
+ >>> enable_insecure_serializers()
+
+ But note that this has global effect, so be very careful should you use it.
+
+ .. rubric:: Footnotes
+
+ .. [#f1] The PyYAML library has a :func:`yaml.load` function with some of the
+ same security implications as pickle, but Kombu uses the
+ :func:`yaml.safe_load` function which is not known to be affected.
+
+- kombu.async: Experimental event loop implementation.
+
+ This code was previously in Celery but was moved here
+ to make it easier for async transport implementations.
+
+ The API is meant to match the Tulip API which will be included
+ in Python 3.4 as the ``asyncio`` module. It's not a complete
+ implementation obviously, but the goal is that it will be easy
+ to change to it once that is possible.
+
+- Utility function ``kombu.common.ipublish`` has been removed.
+
+ Use ``Producer(..., retry=True)`` instead.
+
+- Utility function ``kombu.common.isend_reply`` has been removed
+
+ Use ``send_reply(..., retry=True)`` instead.
+
+- ``kombu.common.entry_to_queue`` and ``kombu.messaging.entry_to_queue``
+ has been removed.
+
+ Use ``Queue.from_dict(name, **options)`` instead.
+
+- Redis: Messages are now restored at the end of the list.
+
+ Contributed by Mark Lavin.
+
+- ``StdConnectionError`` and ``StdChannelError`` is removed
+ and :exc:`amqp.ConnectionError` and :exc:`amqp.ChannelError` is used
+ instead.
+
+- Message object implementation has moved to :class:`kombu.message.Message`.
+
+- Serailization: Renamed functions encode/decode to
+ :func:`~kombu.serialization.dumps` and :func:`~kombu.serialization.loads`.
+
+ For backward compatibility the old names are still available as aliases.
+
+- The ``kombu.log.anon_logger`` function has been removed.
+
+ Use :func:`~kombu.log.get_logger` instead.
+
+- ``queue_declare`` now returns namedtuple with ``queue``, ``message_count``,
+ and ``consumer_count`` fields.
+
+- LamportClock: Can now set lock class
+
+- :mod:`kombu.utils.clock`: Utilities for ordering events added.
+
+- :class:`~kombu.simple.SimpleQueue` now allows you to override
+ the exchange type used.
+
+ Contributed by Vince Gonzales.
+
+- Zookeeper transport updated to support new changes in the :mod:`kazoo`
+ library.
+
+ Contributed by Mahendra M.
+
+- pyamqp/librabbitmq: Transport options are now forwarded as keyword arguments
+ to the underlying connection (Issue #214).
+
+- Transports may now distinguish between recoverable and irrecoverable
+ connection and channel errors.
+
+- ``kombu.utils.Finalize`` has been removed: Use
+ :mod:`multiprocessing.util.Finalize` instead.
+
+- Memory transport now supports the fanout exchange type.
+
+ Contributed by Davanum Srinivas.
+
+- Experimental new `Pyro`_ transport (:mod:`kombu.transport.pyro`).
+
+ Contributed by Tommie McAfee.
+
+.. _`Pyro`: http://pythonhosted.org/Pyro
+
+- Experimental new `SoftLayer MQ`_ transport (:mod:`kombu.transport.SLMQ`).
+
+ Contributed by Kevin McDonald
+
+.. _`SoftLayer MQ`: http://www.softlayer.com/services/additional/message-queue
+
+- Eventio: Kqueue breaks in subtle ways so select is now used instead.
+
+- SQLAlchemy transport: Can now specify table names using the
+ ``queue_tablename`` and ``message_tablename`` transport options.
+
+ Contributed by Ryan Petrello.
+
+Redis transport: Now supports using local UNIX sockets to communicate with the
+ Redis server (Issue #1283)
+
+ To connect using a UNIX socket you have to use the ``redis+socket``
+ URL-prefix: ``redis+socket:///tmp/redis.sock``.
+
+ This functionality was merged from the `celery-redis-unixsocket`_ project.
+ Contributed by Maxime Rouyrre.
+
+ZeroMQ transport: drain_events now supports timeout.
+
+ Contributed by Jesper Thomschütz.
+
+.. _`celery-redis-unixsocket`:
+ https://github.com/piquadrat/celery-redis-unixsocket
+
+.. _version-2.5.16:
+
+2.5.16
+======
+:release-date: 2013-10-04 03:30 P.M BST
+:release-by: Ask Solem
+
+- Python 3: Fixed problem with dependencies not being installed.
+
+.. _version-2.5.15:
+
+2.5.15
+======
+:release-date: 2013-10-04 03:30 P.M BST
+:release-by: Ask Solem
+
+- Declaration cache: Now only keeps hash of declaration
+ so that it does not keep a reference to the channel.
+
+- Declaration cache: Now respects ``entity.can_cache_declaration``
+ attribute.
+
+- Fixes Python 2.5 compatibility.
+
+- Fixes tests after python-msgpack changes.
+
+- ``Queue.get``: Now supports ``accept`` argument.
+
+.. _version-2.5.14:
+
+2.5.14
+======
+:release-date: 2013-08-23 05:00 P.M BST
+:release-by: Ask Solem
+
+- safe_str did not work properly resulting in
+ :exc:`UnicodeDecodeError` (Issue #248).
+
+.. _version-2.5.13:
+
+2.5.13
+======
+:release-date: 2013-08-16 04:00 P.M BST
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 1.0.13
+
+- Fixed typo in Django functional tests.
+
+- safe_str now returns Unicode in Python 2.x
+
+ Fix contributed by Germán M. Bravo.
+
+- amqp: Transport options are now merged with arguments
+ supplied to the connection.
+
+- Tests no longer depends on distribute, which was deprecated
+ and merged back into setuptools.
+
+ Fix contributed by Sascha Peilicke.
+
+- ConsumerMixin now also restarts on channel related errors.
+
+ Fix contributed by Corentin Ardeois.
+
+.. _version-2.5.12:
+
+2.5.12
+======
+:release-date: 2013-06-28 03:30 P.M BST
+:release-by: Ask Solem
+
+- Redis: Ignore errors about keys missing in the round-robin cycle.
+
+- Fixed test suite errors on Python 3.
+
+- Fixed msgpack test failures.
+
+.. _version-2.5.11:
+
+2.5.11
+======
+:release-date: 2013-06-25 02:30 P.M BST
+:release-by: Ask Solem
+
+- Now depends on amqp 1.0.12 (Py3 compatibility issues).
+
+- MongoDB: Removed cause of a "database name in URI is being ignored"
+ warning.
+
+ Fix by Flavio Percoco Premoli
+
+- Adds ``passive`` option to :class:`~kombu.Exchange`.
+
+ Setting this flag means that the exchange will not be declared by kombu,
+ but that it must exist already (or an exception will be raised).
+
+ Contributed by Rafal Malinowski
+
+- Connection.info() now gives the current hostname and not the list of
+ available hostnames.
+
+ Fix contributed by John Shuping.
+
+- pyamqp: Transport options are now forwarded as kwargs to ``amqp.Connection``.
+
+- librabbitmq: Transport options are now forwarded as kwargs to
+ ``librabbitmq.Connection``.
+
+- librabbitmq: Now raises :exc:`NotImplementedError` if SSL is enabled.
+
+ The librabbitmq library does not support ssl,
+ but you can use stunnel or change to the ``pyamqp://`` transport
+ instead.
+
+ Fix contributed by Dan LaMotte.
+
+- librabbitmq: Fixed a cyclic reference at connection close.
+
+- eventio: select implementation now removes bad file descriptors.
+
+- eventio: Fixed Py3 compatibility problems.
+
+- Functional tests added for py-amqp and librabbitmq transports.
+
+- Resource.force_close_all no longer uses a mutex.
+
+- Pidbox: Now ignores `IconsistencyError` when sending replies,
+ as this error simply means that the client may no longer be alive.
+
+- Adds new :meth:`Connection.collect <~kombu.Connection.collect>` method,
+ that can be used to clean up after connections without I/O.
+
+- ``queue_bind`` is no longer called for queues bound to
+ the "default exchange" (Issue #209).
+
+ Contributed by Jonathan Halcrow.
+
+- The max_retries setting for retries was not respected correctly (off by one).
+
+.. _version-2.5.10:
+
+2.5.10
+======
+:release-date: 2013-04-11 06:10 P.M BST
+:release-by: Ask Solem
+
+Note about upcoming changes for Kombu 3.0
+-----------------------------------------
+
+Kombu 3 consumers will no longer accept pickle/yaml or msgpack
+by default, and you will have to explicitly enable untrusted deserializers
+either globally using :func:`kombu.enable_insecure_serializers`, or
+using the ``accept`` argument to :class:`~kombu.Consumer`.
+
+Changes
+-------
+
+- New utility function to disable/enable untrusted serializers.
+
+ - :func:`kombu.disable_insecure_serializers`
+ - :func:`kombu.enable_insecure_serializers`.
+
+- Consumer: ``accept`` can now be used to specify a whitelist
+ of content types to accept.
+
+ If the accept whitelist is set and a message is received
+ with a content type that is not in the whitelist then a
+ :exc:`~kombu.exceptions.ContentDisallowed` exception
+ is raised. Note that this error can be handled by the already
+ existing `on_decode_error` callback
+
+ Examples:
+
+ .. code-block:: python
+
+ Consumer(accept=['application/json'])
+ Consumer(accept=['pickle', 'json'])
+
+- Now depends on amqp 1.0.11
+
+- pidbox: Mailbox now supports the ``accept`` argument.
+
+- Redis: More friendly error for when keys are missing.
+
+- Connection URLs: The parser did not work well when there were
+ multiple '+' tokens.
+
+.. _version-2.5.9:
+
+2.5.9
+=====
+:release-date: 2013-04-08 05:07 P.M BST
+:release-by: Ask Solem
+
+- Pidbox: Now warns if there are multiple nodes consuming from
+ the same pidbox.
+
+- Adds :attr:`Queue.on_declared <kombu.Queue.on_declared>`
+
+ A callback to be called when the queue is declared,
+ with signature ``(name, messages, consumers)``.
+
+- Now uses fuzzy matching to suggest alternatives to typos in transport
+ names.
+
+- SQS: Adds new transport option ``queue_prefix``.
+
+ Contributed by j0hnsmith.
+
+- pyamqp: No longer overrides verify_connection.
+
+- SQS: Now specifies the ``driver_type`` and ``driver_name``
+ attributes.
+
+ Fix contributed by Mher Movsisyan.
+
+- Fixed bug with ``kombu.utils.retry_over_time`` when no errback
+ specified.
+
+
+.. _version-2.5.8:
+
+2.5.8
+=====
+:release-date: 2013-03-21 04:00 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on :mod:`amqp` 1.0.10 which fixes a Python 3 compatibility error.
+
+- Redis: Fixed a possible race condition (Issue #171).
+
+- Redis: Ack emulation/visibility_timeout can now be disabled
+ using a transport option.
+
+ Ack emulation adds quite a lot of overhead to ensure data is safe
+ even in the event of an unclean shutdown. If data loss do not worry
+ you there is now an `ack_emulation` transport option you can use
+ to disable it:
+
+ .. code-block:: python
+
+ Connection('redis://', transport_options={'ack_emulation': False})
+
+- SQS: Fixed :mod:`boto` v2.7 compatibility (Issue #207).
+
+- Exchange: Should not try to re-declare default exchange (``""``)
+ (Issue #209).
+
+- SQS: Long polling is now disabled by default as it was not
+ implemented correctly, resulting in long delays between receiving
+ messages (Issue #202).
+
+- Fixed Python 2.6 incompatibility depending on ``exc.errno``
+ being available.
+
+ Fix contributed by Ephemera.
+
+.. _version-2.5.7:
+
+2.5.7
+=====
+:release-date: 2013-03-08 01:00 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on amqp 1.0.9
+
+- Redis: A regression in 2.5.6 caused the redis transport to
+ ignore options set in ``transport_options``.
+
+- Redis: New ``socket_timeout`` transport option.
+
+- Redis: ``InconsistencyError`` is now regarded as a recoverable error.
+
+- Resource pools: Will no longer attempt to release resource
+ that was never acquired.
+
+- MongoDB: Now supports the ``ssl`` option.
+
+ Contributed by Sebastian Pawlus.
+
+.. _version-2.5.6:
+
+2.5.6
+=====
+:release-date: 2013-02-08 01:00 P.M UTC
+:release-by: Ask Solem
+
+- Now depends on amqp 1.0.8 which works around a bug found on some
+ Python 2.5 installations where 2**32 overflows to 0.
+
+.. _version-2.5.5:
+
+2.5.5
+=====
+:release-date: 2013-02-07 05:00 P.M UTC
+:release-by: Ask Solem
+
+SQS: Now supports long polling (Issue #176).
+
+ The polling interval default has been changed to 0 and a new
+ transport option (``wait_time_seconds``) has been added.
+ This parameter specifies how long to wait for a message from
+ SQS, and defaults to 20 seconds, which is the maximum
+ value currently allowed by Amazon SQS.
+
+ Contributed by James Saryerwinnie.
+
+- SQS: Now removes unpickleable fields before restoring messages.
+
+- Consumer.__exit__ now ignores exceptions occurring while
+ canceling the consumer.
+
+- Virtual: Routing keys can now consist of characters also used
+ in regular expressions (e.g. parens) (Issue #194).
+
+- Virtual: Fixed compression header when restoring messages.
+
+ Fix contributed by Alex Koshelev.
+
+- Virtual: ack/reject/requeue now works while using ``basic_get``.
+
+- Virtual: Message.reject is now supported by virtual transports
+ (requeue depends on individual transport support).
+
+- Fixed typo in hack used for static analyzers.
+
+ Fix contributed by Basil Mironenko.
+
+.. _version-2.5.4:
+
+2.5.4
+=====
+:release-date: 2012-12-10 12:35 P.M UTC
+:release-by: Ask Solem
+
+- Fixed problem with connection clone and multiple URLs (Issue #182).
+
+ Fix contributed by Dane Guempel.
+
+- zeromq: Now compatible with libzmq 3.2.x.
+
+ Fix contributed by Andrey Antukh.
+
+- Fixed Python 3 installation problem (Issue #187).
+
+.. _version-2.5.3:
+
+2.5.3
+=====
+:release-date: 2012-11-29 12:35 P.M UTC
+:release-by: Ask Solem
+
+- Pidbox: Fixed compatibility with Python 2.6
+
+2.5.2
+=====
+:release-date: 2012-11-29 12:35 P.M UTC
+:release-by: Ask Solem
+
+.. _version-2.5.2:
+
+2.5.2
+=====
+:release-date: 2012-11-29 12:35 P.M UTC
+:release-by: Ask Solem
+
+- [Redis] Fixed connection leak and added a new 'max_connections' transport
+ option.
+
+.. _version-2.5.1:
+
+2.5.1
+=====
+:release-date: 2012-11-28 12:45 P.M UTC
+:release-by: Ask Solem
+
+- Fixed bug where return value of Queue.as_dict could not be serialized with
+ JSON (Issue #177).
+
+.. _version-2.5.0:
+
+2.5.0
+=====
+:release-date: 2012-11-27 04:00 P.M UTC
+:release-by: Ask Solem
+
+- `py-amqp`_ is now the new default transport, replacing ``amqplib``.
+
+ The new `py-amqp`_ library is a fork of amqplib started with the
+ following goals:
+
+ - Uses AMQP 0.9.1 instead of 0.8
+ - Support for heartbeats (Issue #79 + Issue #131)
+ - Automatically revives channels on channel errors.
+ - Support for all RabbitMQ extensions
+ - Consumer Cancel Notifications (Issue #131)
+ - Publisher Confirms (Issue #131).
+ - Exchange-to-exchange bindings: ``exchange_bind`` / ``exchange_unbind``.
+ - API compatible with :mod:`librabbitmq` so that it can be used
+ as a pure-python replacement in environments where rabbitmq-c cannot
+ be compiled. librabbitmq will be updated to support all the same
+ features as py-amqp.
+
+- Support for using multiple connection URL's for failover.
+
+ The first argument to :class:`~kombu.Connection` can now be a list of
+ connection URLs:
+
+ .. code-block:: python
+
+ Connection(['amqp://foo', 'amqp://bar'])
+
+ or it can be a single string argument with several URLs separated by
+ semicolon:
+
+ .. code-block:: python
+
+ Connection('amqp://foo;amqp://bar')
+
+ There is also a new keyword argument ``failover_strategy`` that defines
+ how :meth:`~kombu.Connection.ensure_connection`/
+ :meth:`~kombu.Connection.ensure`/:meth:`kombu.Connection.autoretry` will
+ reconnect in the event of connection failures.
+
+ The default reconnection strategy is ``round-robin``, which will simply
+ cycle through the list forever, and there's also a ``shuffle`` strategy
+ that will select random hosts from the list. Custom strategies can also
+ be used, in that case the argument must be a generator yielding the URL
+ to connect to.
+
+ Example:
+
+ .. code-block:: python
+
+ Connection('amqp://foo;amqp://bar')
+
+- Now supports PyDev, PyCharm, pylint and other static code analysis tools.
+
+- :class:`~kombu.Queue` now supports multiple bindings.
+
+ You can now have multiple bindings in the same queue by having
+ the second argument be a list:
+
+ .. code-block:: python
+
+ from kombu import binding, Queue
+
+ Queue('name', [
+ binding(Exchange('E1'), routing_key='foo'),
+ binding(Exchange('E1'), routing_key='bar'),
+ binding(Exchange('E2'), routing_key='baz'),
+ ])
+
+ To enable this, helper methods have been added:
+
+ - :meth:`~kombu.Queue.bind_to`
+ - :meth:`~kombu.Queue.unbind_from`
+
+ Contributed by Rumyana Neykova.
+
+- Custom serializers can now be registered using Setuptools entry-points.
+
+ See :ref:`serialization-entrypoints`.
+
+- New :class:`kombu.common.QoS` class used as a thread-safe way to manage
+ changes to a consumer or channels prefetch_count.
+
+ This was previously an internal class used in Celery now moved to
+ the :mod:`kombu.common` module.
+
+- Consumer now supports a ``on_message`` callback that can be used to process
+ raw messages (not decoded).
+
+ Other callbacks specified using the ``callbacks`` argument, and
+ the ``receive`` method will be not be called when a on message callback
+ is present.
+
+- New utility :func:`kombu.common.ignore_errors` ignores connection and
+ channel errors.
+
+ Must only be used for cleanup actions at shutdown or on connection loss.
+
+- Support for exchange-to-exchange bindings.
+
+ The :class:`~kombu.Exchange` entity gained ``bind_to``
+ and ``unbind_from`` methods:
+
+ .. code-block:: python
+
+ e1 = Exchange('A')(connection)
+ e2 = Exchange('B')(connection)
+
+ e2.bind_to(e1, routing_key='rkey', arguments=None)
+ e2.unbind_from(e1, routing_key='rkey', arguments=None)
+
+ This is currently only supported by the ``pyamqp`` transport.
+
+ Contributed by Rumyana Neykova.
+
+.. _version-2.4.10:
+
+2.4.10
+======
+:release-date: 2012-11-22 06:00 P.M UTC
+:release-by: Ask Solem
+
+- The previous versions connection pool changes broke Redis support so that
+ it would always connect to localhost (default setting) no matter what
+ connection parameters were provided (Issue #176).
+
+.. _version-2.4.9:
+
+2.4.9
+=====
+:release-date: 2012-11-21 03:00 P.M UTC
+:release-by: Ask Solem
+
+- Redis: Fixed race condition that could occur while trying to restore
+ messages (Issue #171).
+
+ Fix contributed by Ollie Walsh.
+
+- Redis: Each channel is now using a specific connection pool instance,
+ which is disconnected on connection failure.
+
+- ProducerPool: Fixed possible dead-lock in the acquire method.
+
+- ProducerPool: ``force_close_all`` no longer tries to call the non-existent
+ ``Producer._close``.
+
+- librabbitmq: Now implements ``transport.verify_connection`` so that
+ connection pools will not give back connections that are no longer working.
+
+- New and better ``repr()`` for Queue and Exchange objects.
+
+- Python 3: Fixed problem with running the unit test suite.
+
+- Python 3: Fixed problem with JSON codec.
+
+.. _version-2.4.8:
+
+2.4.8
+=====
+:release-date: 2012-11-02 05:00 P.M UTC
+:release-by: Ask Solem
+
+- Redis: Improved fair queue cycle implementation (Issue #166).
+
+ Contributed by Kevin McCarthy.
+
+- Redis: Unacked message restore limit is now unlimited by default.
+
+ Also, the limit can now be configured using the ``unacked_restore_limit``
+ transport option:
+
+ .. code-block:: python
+
+ Connection('redis://', transport_options={
+ 'unacked_restore_limit': 100,
+ })
+
+ A limit of 100 means that the consumer will restore at most 100
+ messages at each pass.
+
+- Redis: Now uses a mutex to ensure only one consumer restores messages at a
+ time.
+
+ The mutex expires after 5 minutes by default, but can be configured
+ using the ``unacked_mutex_expire`` transport option.
+
+- LamportClock.adjust now returns the new clock value.
+
+- Heartbeats can now be specified in URLs.
+
+ Fix contributed by Mher Movsisyan.
+
+- Kombu can now be used with PyDev, PyCharm and other static analysis tools.
+
+- Fixes problem with msgpack on Python 3 (Issue #162).
+
+ Fix contributed by Jasper Bryant-Greene
+
+- amqplib: Fixed bug with timeouts when SSL is used in non-blocking mode.
+
+ Fix contributed by Mher Movsisyan
+
+
+.. _version-2.4.7:
+
+2.4.7
+=====
+:release-date: 2012-09-18 03:00 P.M BST
+:release-by: Ask Solem
+
+- Virtual: Unknown exchanges now default to 'direct' when sending a message.
+
+- MongoDB: Fixed memory leak when merging keys stored in the db (Issue #159)
+
+ Fix contributed by Michael Korbakov.
+
+- MongoDB: Better index for MongoDB transport (Issue #158).
+
+ This improvement will create a new compund index for queue and _id in order
+ to be able to use both indexed fields for getting a new message (using
+ queue field) and sorting by _id. It'll be necessary to manually delete
+ the old index from the collection.
+
+ Improvement contributed by rmihael
+
+.. _version-2.4.6:
+
+2.4.6
+=====
+:release-date: 2012-09-12 03:00 P.M BST
+:release-by: Ask Solem
+
+- Adds additional compatibility dependencies:
+
+ - Python <= 2.6:
+
+ - importlib
+ - ordereddict
+
+ - Python <= 2.5
+
+ - simplejson
+
+.. _version-2.4.5:
+
+2.4.5
+=====
+:release-date: 2012-08-30 03:36 P.M BST
+:release-by: Ask Solem
+
+- Last version broke installtion on PyPy and Jython due
+ to test requirements clean-up.
+
+.. _version-2.4.4:
+
+2.4.4
+=====
+:release-date: 2012-08-29 04:00 P.M BST
+:release-by: Ask Solem
+
+- amqplib: Fixed a bug with asynchronously reading large messages.
+
+- pyamqp: Now requires amqp 0.9.3
+
+- Cleaned up test requirements.
+
+.. _version-2.4.3:
+
+2.4.3
+=====
+:release-date: 2012-08-25 10:30 P.M BST
+:release-by: Ask Solem
+
+- Fixed problem with amqp transport alias (Issue #154).
+
+.. _version-2.4.2:
+
+2.4.2
+=====
+:release-date: 2012-08-24 05:00 P.M BST
+:release-by: Ask Solem
+
+- Having an empty transport name broke in 2.4.1.
+
+
+.. _version-2.4.1:
+
+2.4.1
+=====
+:release-date: 2012-08-24 04:00 P.M BST
+:release-by: Ask Solem
+
+- Redis: Fixed race condition that could cause the consumer to crash (Issue #151)
+
+ Often leading to the error message ``"could not convert string to float"``
+
+- Connection retry could cause an inifite loop (Issue #145).
+
+- The ``amqp`` alias is now resolved at runtime, so that eventlet detection
+ works even if patching was done later.
+
+.. _version-2.4.0:
+
+2.4.0
+=====
+:release-date: 2012-08-17 08:00 P.M BST
+:release-by: Ask Solem
+
+- New experimental :mod:`ZeroMQ <kombu.transport.zmq` transport.
+
+ Contributed by John Watson.
+
+- Redis: Ack timed-out messages were not restored when using the eventloop.
+
+- Now uses pickle protocol 2 by default to be cross-compatible with Python 3.
+
+ The protocol can also now be changed using the :envvar:`PICKLE_PROTOCOL`
+ environment variable.
+
+- Adds ``Transport.supports_ev`` attribute.
+
+- Pika: Queue purge was not working properly.
+
+ Fix contributed by Steeve Morin.
+
+- Pika backend was no longer working since Kombu 2.3
+
+ Fix contributed by Steeve Morin.
+
+.. _version-2.3.2:
+
+2.3.2
+=====
+:release-date: 2012-08-01 06:00 P.M BST
+:release-by: Ask Solem
+
+- Fixes problem with deserialization in Python 3.
+
+.. _version-2.3.1:
+
+2.3.1
+=====
+:release-date: 2012-08-01 04:00 P.M BST
+:release-by: Ask Solem
+
+- librabbitmq: Can now handle messages that does not have a
+ content_encoding/content_type set (Issue #149).
+
+ Fix contributed by C Anthony Risinger.
+
+- Beanstalk: Now uses localhost by default if the URL does not contain a host.
+
+.. _version-2.3.0:
+
+2.3.0
+=====
+:release-date: 2012-07-24 03:50 P.M BST
+:release-by: Ask Solem
+
+- New ``pyamqp://`` transport!
+
+ The new `py-amqp`_ library is a fork of amqplib started with the
+ following goals:
+
+ - Uses AMQP 0.9.1 instead of 0.8
+ - Should support all RabbitMQ extensions
+ - API compatible with :mod:`librabbitmq` so that it can be used
+ as a pure-python replacement in environments where rabbitmq-c cannot
+ be compiled.
+
+ .. _`py-amqp`: https://amqp.readthedocs.io/
+
+ If you start using use py-amqp instead of amqplib you can enjoy many
+ advantages including:
+
+ - Heartbeat support (Issue #79 + Issue #131)
+ - Consumer Cancel Notifications (Issue #131)
+ - Publisher Confirms
+
+ amqplib has not been updated in a long while, so maintaining our own fork
+ ensures that we can quickly roll out new features and fixes without
+ resorting to monkey patching.
+
+ To use the py-amqp transport you must install the :mod:`amqp` library:
+
+ .. code-block:: console
+
+ $ pip install amqp
+
+ and change the connection URL to use the correct transport:
+
+ .. code-block:: pycon
+
+ >>> conn = Connection('pyamqp://guest:guest@localhost//')
+
+
+ The ``pyamqp://`` transport will be the default fallback transport
+ in Kombu version 3.0, when :mod:`librabbitmq` is not installed,
+ and librabbitmq will also be updated to support the same features.
+
+- Connection now supports heartbeat argument.
+
+ If enabled you must make sure to manually maintain heartbeats
+ by calling the ``Connection.heartbeat_check`` at twice the rate
+ of the specified heartbeat interval.
+
+ E.g. if you have ``Connection(heartbeat=10)``,
+ then you must call ``Connection.heartbeat_check()`` every 5 seconds.
+
+ if the server has not sent heartbeats at a suitable rate then
+ the heartbeat check method must raise an error that is listed
+ in ``Connection.connection_errors``.
+
+ The attribute ``Connection.supports_heartbeats`` has been added
+ for the ability to inspect if a transport supports heartbeats
+ or not.
+
+ Calling ``heartbeat_check`` on a transport that does
+ not support heartbeats results in a noop operation.
+
+- SQS: Fixed bug with invalid characters in queue names.
+
+ Fix contributed by Zach Smith.
+
+- utils.reprcall: Fixed typo where kwargs argument was an empty tuple by
+ default, and not an empty dict.
+
+.. _version-2.2.6:
+
+2.2.6
+=====
+:release-date: 2012-07-10 05:00 P.M BST
+:release-by: Ask Solem
+
+- Adds ``kombu.messaging.entry_to_queue`` for compat with previous versions.
+
+.. _version-2.2.5:
+
+2.2.5
+=====
+:release-date: 2012-07-10 05:00 P.M BST
+:release-by: Ask Solem
+
+- Pidbox: Now sets queue expire at 10 seconds for reply queues.
+
+- EventIO: Now ignores ``ValueError`` raised by epoll unregister.
+
+- MongoDB: Fixes Issue #142
+
+ Fix by Flavio Percoco Premoli
+
+.. _version-2.2.4:
+
+2.2.4
+=====
+:release-date: 2012-07-05 04:00 P.M BST
+:release-by: Ask Solem
+
+- Support for msgpack-python 0.2.0 (Issue #143)
+
+ The latest msgpack version no longer supports Python 2.5, so if you're
+ still using that you need to depend on an earlier msgpack-python version.
+
+ Fix contributed by Sebastian Insua
+
+- :func:`~kombu.common.maybe_declare` no longer caches entities with the
+ ``auto_delete`` flag set.
+
+- New experimental filesystem transport.
+
+ Contributed by Bobby Beever.
+
+- Virtual Transports: Now support anonymous queues and exchanges.
+
+.. _version-2.2.3:
+
+2.2.3
+=====
+:release-date: 2012-06-24 05:00 P.M BST
+:release-by: Ask Solem
+
+- ``BrokerConnection`` now renamed to ``Connection``.
+
+ The name ``Connection`` has been an alias for a very long time,
+ but now the rename is official in the documentation as well.
+
+ The Connection alias has been available since version 1.1.3,
+ and ``BrokerConnection`` will still work and is not deprecated.
+
+- ``Connection.clone()`` now works for the sqlalchemy transport.
+
+- :func:`kombu.common.eventloop`, :func:`kombu.utils.uuid`,
+ and :func:`kombu.utils.url.parse_url` can now be
+ imported from the :mod:`kombu` module directly.
+
+- Pidbox transport callback ``after_reply_message_received`` now happens
+ in a finally block.
+
+- Trying to use the ``librabbitmq://`` transport will now show the right
+ name in the :exc:`ImportError` if :mod:`librabbitmq` is not installed.
+
+ The librabbitmq falls back to the older ``pylibrabbitmq`` name for
+ compatibility reasons and would therefore show ``No module named
+ pylibrabbitmq`` instead of librabbitmq.
+
+
+.. _version-2.2.2:
+
+2.2.2
+=====
+:release-date: 2012-06-22 02:30 P.M BST
+:release-by: Ask Solem
+
+- Now depends on :mod:`anyjson` 0.3.3
+
+- Json serializer: Now passes :class:`buffer` objects directly,
+ since this is supported in the latest :mod:`anyjson` version.
+
+- Fixes blocking epoll call if timeout was set to 0.
+
+ Fix contributed by John Watson.
+
+- setup.py now takes requirements from the :file:`requirements/` directory.
+
+- The distribution directory :file:`contrib/` is now renamed to :file:`extra/`
+
+.. _version-2.2.1:
+
+2.2.1
+=====
+:release-date: 2012-06-21 01:00 P.M BST
+:release-by: Ask Solem
+
+- SQS: Default visibility timeout is now 30 minutes.
+
+ Since we have ack emulation the visibility timeout is
+ only in effect if the consumer is abrubtly terminated.
+
+- retry argument to ``Producer.publish`` now works properly,
+ when the declare argument is specified.
+
+- Json serializer: didn't handle buffer objects (Issue #135).
+
+ Fix contributed by Jens Hoffrichter.
+
+- Virtual: Now supports passive argument to ``exchange_declare``.
+
+- Exchange & Queue can now be bound to connections (which will use the default
+ channel):
+
+ .. code-block:: pycon
+
+ >>> exchange = Exchange('name')
+ >>> bound_exchange = exchange(connection)
+ >>> bound_exchange.declare()
+
+- ``SimpleQueue`` & ``SimpleBuffer`` can now be bound to connections (which
+ will use the default channel).
+
+- ``Connection.manager.get_bindings`` now works for librabbitmq and pika.
+
+- Adds new transport info attributes:
+
+ - ``Transport.driver_type``
+
+ Type of underlying driver, e.g. "amqp", "redis", "sql".
+
+ - ``Transport.driver_name``
+
+ Name of library used e.g. "amqplib", "redis", "pymongo".
+
+ - ``Transport.driver_version()``
+
+ Version of underlying library.
+
+.. _version-2.2.0:
+
+2.2.0
+=====
+:release-date: 2012-06-07 03:10 P.M BST
+:release-by: Ask Solem
+
+.. _v220-important:
+
+Important Notes
+---------------
+
+- The canonical source code repository has been moved to
+
+ http://github.com/celery/kombu
+
+- Pidbox: Exchanges used by pidbox are no longer auto_delete.
+
+ Auto delete has been described as a misfeature,
+ and therefore we have disabled it.
+
+ For RabbitMQ users old exchanges used by pidbox must be removed,
+ these are named ``mailbox_name.pidbox``,
+ and ``reply.mailbox_name.pidbox``.
+
+ The following command can be used to clean up these exchanges:
+
+ .. code-block:: text
+
+ $ VHOST=/ URL=amqp:// python -c'import sys,kombu;[kombu.Connection(
+ sys.argv[-1]).channel().exchange_delete(x)
+ for x in sys.argv[1:-1]]' \
+ $(sudo rabbitmqctl -q list_exchanges -p "$VHOST" \
+ | grep \.pidbox | awk '{print $1}') "$URL"
+
+ The :envvar:`VHOST` variable must be set to the target RabbitMQ virtual host,
+ and the :envvar:`URL` must be the AMQP URL to the server.
+
+- The ``amqp`` transport alias will now use :mod:`librabbitmq`
+ if installed.
+
+ `py-librabbitmq`_ is a fast AMQP client for Python
+ using the librabbitmq C library.
+
+ It can be installed by:
+
+ .. code-block:: console
+
+ $ pip install librabbitmq
+
+ It will not be used if the process is monkey patched by eventlet/gevent.
+
+.. _`py-librabbitmq`: https://github.com/celery/librabbitmq
+
+.. _v220-news:
+
+News
+----
+
+- Redis: Ack emulation improvements.
+
+ Reducing the possibility of data loss.
+
+ Acks are now implemented by storing a copy of the message when the message
+ is consumed. The copy is not removed until the consumer acknowledges
+ or rejects it.
+
+ This means that unacknowledged messages will be redelivered either
+ when the connection is closed, or when the visibility timeout is exceeded.
+
+ - Visibility timeout
+
+ This is a timeout for acks, so that if the consumer
+ does not ack the message within this time limit, the message
+ is redelivered to another consumer.
+
+ The timeout is set to one hour by default, but
+ can be changed by configuring a transport option:
+
+ >>> Connection('redis://', transport_options={
+ ... 'visibility_timeout': 1800, # 30 minutes
+ ... })
+
+ **NOTE**: Messages that have not been acked will be redelivered
+ if the visibility timeout is exceeded, for Celery users
+ this means that ETA/countdown tasks that are scheduled to execute
+ with a time that exceeds the visibility timeout will be executed
+ twice (or more). If you plan on using long ETA/countdowns you
+ should tweak the visibility timeout accordingly:
+
+ .. code-block:: python
+
+ BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 18000} # 5 hours
+
+ Setting a long timeout means that it will take a long time
+ for messages to be redelivered in the event of a power failure,
+ but if so happens you could temporarily set the visibility timeout lower
+ to flush out messages when you start up the systems again.
+
+- Experimental `Apache ZooKeeper`_ transport
+
+ More information is in the module reference:
+ :mod:`kombu.transport.zookeeper`.
+
+ Contributed by Mahendra M.
+
+.. _`Apache ZooKeeper`: http://zookeeper.apache.org/
+
+- Redis: Priority support.
+
+ The message's ``priority`` field is now respected by the Redis
+ transport by having multiple lists for each named queue.
+ The queues are then consumed by in order of priority.
+
+ The priority field is a number in the range of 0 - 9, where
+ 0 is the default and highest priority.
+
+ The priority range is collapsed into four steps by default, since it is
+ unlikely that nine steps will yield more benefit than using four steps.
+ The number of steps can be configured by setting the ``priority_steps``
+ transport option, which must be a list of numbers in **sorted order**:
+
+ .. code-block:: pycon
+
+ >>> x = Connection('redis://', transport_options={
+ ... 'priority_steps': [0, 2, 4, 6, 8, 9],
+ ... })
+
+ Priorities implemented in this way is not as reliable as
+ priorities on the server side, which is why
+ nickname the feature "quasi-priorities";
+ **Using routing is still the suggested way of ensuring
+ quality of service**, as client implemented priorities
+ fall short in a number of ways, e.g. if the worker
+ is busy with long running tasks, has prefetched many messages,
+ or the queues are congested.
+
+ Still, it is possible that using priorities in combination
+ with routing can be more beneficial than using routing
+ or priorities alone. Experimentation and monitoring
+ should be used to prove this.
+
+ Contributed by Germán M. Bravo.
+
+- Redis: Now cycles queues so that consuming is fair.
+
+ This ensures that a very busy queue won't block messages
+ from other queues, and ensures that all queues have
+ an equal chance of being consumed from.
+
+ This used to be the case before, but the behavior was
+ accidentally changed while switching to using blocking pop.
+
+- Redis: Auto delete queues that are bound to fanout exchanges
+ is now deleted at channel.close.
+
+- amqplib: Refactored the drain_events implementation.
+
+- Pidbox: Now uses ``connection.default_channel``.
+
+- Pickle serialization: Can now decode buffer objects.
+
+- Exchange/Queue declarations can now be cached even if
+ the entity is non-durable.
+
+ This is possible because the list of cached declarations
+ are now kept with the connection, so that the entities
+ will be redeclared if the connection is lost.
+
+- Kombu source code now only uses one-level of explicit relative imports.
+
+.. _v220-fixes:
+
+Fixes
+-----
+
+- eventio: Now ignores ENOENT raised by ``epoll.register``, and
+ EEXIST from ``epoll.unregister``.
+
+- eventio: kqueue now ignores :exc:`KeyError` on unregister.
+
+- Redis: ``Message.reject`` now supports the ``requeue`` argument.
+
+- Redis: Remove superfluous pipeline call.
+
+ Fix contributed by Thomas Johansson.
+
+- Redis: Now sets redelivered header for redelivered messages.
+
+- Now always makes sure references to :func:`sys.exc_info` is removed.
+
+- Virtual: The compression header is now removed before restoring messages.
+
+- More tests for the SQLAlchemy backend.
+
+ Contributed by Franck Cuny.
+
+- Url parsing did not handle MongoDB URLs properly.
+
+ Fix contributed by Flavio Percoco Premoli.
+
+- Beanstalk: Ignore default tube when reserving.
+
+ Fix contributed by Zhao Xiaohong.
+
+Nonblocking consume support
+---------------------------
+
+librabbitmq, amqplib and redis transports can now be used
+non-blocking.
+
+The interface is very manual, and only consuming messages
+is non-blocking so far.
+
+The API should not be regarded as stable or final
+in any way. It is used by Celery which has very limited
+needs at this point. Hopefully we can introduce a proper
+callback-based API later.
+
+- ``Transport.eventmap``
+
+ Is a map of ``fd -> callback(fileno, event)``
+ to register in an eventloop.
+
+- ``Transport.on_poll_start()``
+
+ Is called before every call to poll.
+ The poller must support ``register(fd, callback)``
+ and ``unregister(fd)`` methods.
+
+- ``Transport.on_poll_start(poller)``
+
+ Called when the hub is initialized.
+ The poller argument must support the same
+ interface as :class:`kombu.utils.eventio.poll`.
+
+- ``Connection.ensure_connection`` now takes a callback
+ argument which is called for every loop while
+ the connection is down.
+
+- Adds ``connection.drain_nowait``
+
+ This is a non-blocking alternative to drain_events,
+ but only supported by amqplib/librabbitmq.
+
+- drain_events now sets ``connection.more_to_read`` if
+ there is more data to read.
+
+ This is to support eventloops where other things
+ must be handled between draining events.
+
+.. _version-2.1.8:
+
+2.1.8
+=====
+:release-date: 2012-05-06 03:06 P.M BST
+:release-by: Ask Solem
+
+* Bound Exchange/Queue's are now pickleable.
+
+* Consumer/Producer can now be instantiated without a channel,
+ and only later bound using ``.revive(channel)``.
+
+* ProducerPool now takes ``Producer`` argument.
+
+* :func:`~kombu.utils.fxrange` now counts forever if the
+ stop argument is set to None.
+ (fxrange is like xrange but for decimals).
+
+* Auto delete support for virtual transports were incomplete
+ and could lead to problems so it was removed.
+
+* Cached declarations (:func:`~kombu.common.maybe_declare`)
+ are now bound to the underlying connection, so that
+ entities are redeclared if the connection is lost.
+
+ This also means that previously uncacheable entities
+ (e.g. non-durable) can now be cached.
+
+* compat ConsumerSet: can now specify channel.
+
+.. _version-2.1.7:
+
+2.1.7
+=====
+:release-date: 2012-04-27 06:00 P.M BST
+:release-by: Ask Solem
+
+* compat consumerset now accepts optional channel argument.
+
+.. _version-2.1.6:
+
+2.1.6
+=====
+:release-date: 2012-04-23 01:30 P.M BST
+:release-by: Ask Solem
+
+* SQLAlchemy transport was not working correctly after URL parser change.
+
+* maybe_declare now stores cached declarations per underlying connection
+ instead of globally, in the rare case that data disappears from the
+ broker after connection loss.
+
+* Django: Added South migrations.
+
+ Contributed by Joseph Crosland.
+
+.. _version-2.1.5:
+
+2.1.5
+=====
+:release-date: 2012-04-13 03:30 P.M BST
+:release-by: Ask Solem
+
+* The url parser removed more than the first leading slash (Issue #121).
+
+* SQLAlchemy: Can now specify url using + separator
+
+ Example:
+
+ .. code-block:: python
+
+ Connection('sqla+mysql://localhost/db')
+
+* Better support for anonymous queues (Issue #116).
+
+ Contributed by Michael Barrett.
+
+* ``Connection.as_uri`` now quotes url parts (Issue #117).
+
+* Beanstalk: Can now set message TTR as a message property.
+
+ Contributed by Andrii Kostenko
+
+.. _version-2.1.4:
+
+2.1.4
+=====
+:release-date: 2012-04-03 04:00 P.M GMT
+:release-by: Ask Solem
+
+* MongoDB: URL parsing are now delegated to the pymongo library
+ (Fixes Issue #103 and Issue #87).
+
+ Fix contributed by Flavio Percoco Premoli and James Sullivan
+
+* SQS: A bug caused SimpleDB to be used even if sdb persistence
+ was not enabled (Issue #108).
+
+ Fix contributed by Anand Kumria.
+
+* Django: Transaction was committed in the wrong place, causing
+ data cleanup to fail (Issue #115).
+
+ Fix contributed by Daisuke Fujiwara.
+
+* MongoDB: Now supports replica set URLs.
+
+ Contributed by Flavio Percoco Premoli.
+
+* Redis: Now raises a channel error if a queue key that is currently
+ being consumed from disappears.
+
+ Fix contributed by Stephan Jaekel.
+
+* All transport 'channel_errors' lists now includes
+ ``kombu.exception.StdChannelError``.
+
+* All kombu exceptions now inherit from a common
+ :exc:`~kombu.exceptions.KombuError`.
+
+.. _version-2.1.3:
+
+2.1.3
+=====
+:release-date: 2012-03-20 03:00 P.M GMT
+:release-by: Ask Solem
+
+* Fixes Jython compatibility issues.
+
+* Fixes Python 2.5 compatibility issues.
+
+.. _version-2.1.2:
+
+2.1.2
+=====
+:release-date: 2012-03-01 01:00 P.M GMT
+:release-by: Ask Solem
+
+* amqplib: Last version broke SSL support.
+
+.. _version-2.1.1:
+
+2.1.1
+=====
+:release-date: 2012-02-24 02:00 P.M GMT
+:release-by: Ask Solem
+
+* Connection URLs now supports encoded characters.
+
+* Fixed a case where connection pool could not recover from connection loss.
+
+ Fix contributed by Florian Munz.
+
+* We now patch amqplib's ``__del__`` method to skip trying to close the socket
+ if it is not connected, as this resulted in an annoying warning.
+
+* Compression can now be used with binary message payloads.
+
+ Fix contributed by Steeve Morin.
+
+.. _version-2.1.0:
+
+2.1.0
+=====
+:release-date: 2012-02-04 10:38 P.M GMT
+:release-by: Ask Solem
+
+* MongoDB: Now supports fanout (broadcast) (Issue #98).
+
+ Contributed by Scott Lyons.
+
+* amqplib: Now detects broken connections by using ``MSG_PEEK``.
+
+* pylibrabbitmq: Now supports ``basic_get`` (Issue #97).
+
+* gevent: Now always uses the ``select`` polling backend.
+
+* pika transport: Now works with pika 0.9.5 and 0.9.6dev.
+
+ The old pika transport (supporting 0.5.x) is now available
+ as alias ``oldpika``.
+
+ (Note terribly latency has been experienced with the new pika
+ versions, so this is still an experimental transport).
+
+* Virtual transports: can now set polling interval via the
+ transport options (Issue #96).
+
+ Example:
+
+ .. code-block:: pycon
+
+ >>> Connection('sqs://', transport_options={
+ ... 'polling_interval': 5.0})
+
+ The default interval is transport specific, but usually
+ 1.0s (or 5.0s for the Django database transport, which
+ can also be set using the ``KOMBU_POLLING_INTERVAL`` setting).
+
+* Adds convenience function: :func:`kombu.common.eventloop`.
+
+.. _version-2.0.0:
+
+2.0.0
+=====
+:release-date: 2012-01-15 06:34 P.M GMT
+:release-by: Ask Solem
+
+.. _v200-important:
+
+Important Notes
+---------------
+
+.. _v200-python-compatibility:
+
+Python Compatibility
+~~~~~~~~~~~~~~~~~~~~
+
+* No longer supports Python 2.4.
+
+ Users of Python 2.4 can still use the 1.x series.
+
+ The 1.x series has entered bugfix-only maintenance mode, and will
+ stay that way as long as there is demand, and a willingness to
+ maintain it.
+
+
+.. _v200-new-transports:
+
+New Transports
+~~~~~~~~~~~~~~
+
+* ``django-kombu`` is now part of Kombu core.
+
+ The Django message transport uses the Django ORM to store messages.
+
+ It uses polling, with a default polling interval of 5 seconds.
+ The polling interval can be increased or decreased by configuring the
+ ``KOMBU_POLLING_INTERVAL`` Django setting, which is the polling
+ interval in seconds as an int or a float. Note that shorter polling
+ intervals can cause extreme strain on the database: if responsiveness
+ is needed you shall consider switching to a non-polling transport.
+
+ To use it you must use transport alias ``"django"``,
+ or as a URL:
+
+ .. code-block:: text
+
+ django://
+
+ and then add ``kombu.transport.django`` to ``INSTALLED_APPS``, and
+ run ``manage.py syncdb`` to create the necessary database tables.
+
+ **Upgrading**
+
+ If you have previously used ``django-kombu``, then the entry
+ in ``INSTALLED_APPS`` must be changed from ``djkombu``
+ to ``kombu.transport.django``:
+
+ .. code-block:: python
+
+ INSTALLED_APPS = (
+ # …,
+ 'kombu.transport.django',
+ )
+
+ If you have previously used django-kombu, then there is no need
+ to recreate the tables, as the old tables will be fully compatible
+ with the new version.
+
+* ``kombu-sqlalchemy`` is now part of Kombu core.
+
+ This change requires no code changes given that the
+ ``sqlalchemy`` transport alias is used.
+
+.. _v200-news:
+
+News
+----
+
+* :class:`kombu.mixins.ConsumerMixin` is a mixin class that lets you
+ easily write consumer programs and threads.
+
+ See :ref:`examples` and :ref:`guide-consumers`.
+
+* SQS Transport: Added support for SQS queue prefixes (Issue #84).
+
+ The queue prefix can be set using the transport option
+ ``queue_name_prefix``:
+
+ .. code-block:: python
+
+ BrokerTransport('SQS://', transport_options={
+ 'queue_name_prefix': 'myapp'})
+
+ Contributed by Nitzan Miron.
+
+* ``Producer.publish`` now supports automatic retry.
+
+ Retry is enabled by the ``reply`` argument, and retry options
+ set by the ``retry_policy`` argument:
+
+ .. code-block:: python
+
+ exchange = Exchange('foo')
+ producer.publish(message, exchange=exchange, retry=True,
+ declare=[exchange], retry_policy={
+ 'interval_start': 1.0})
+
+ See :meth:`~kombu.Connection.ensure`
+ for a list of supported retry policy options.
+
+* ``Producer.publish`` now supports a ``declare`` keyword argument.
+
+ This is a list of entities (:class:`Exchange`, or :class:`Queue`)
+ that should be declared before the message is published.
+
+.. _v200-fixes:
+
+Fixes
+-----
+
+* Redis transport: Timeout was multiplied by 1000 seconds when using
+ ``select`` for event I/O (Issue #86).
+
+.. _version-1.5.1:
+
+1.5.1
+=====
+:release-date: 2011-11-30 01:00 P.M GMT
+:release-by: Ask Solem
+
+* Fixes issue with ``kombu.compat`` introduced in 1.5.0 (Issue #83).
+
+* Adds the ability to disable content_types in the serializer registry.
+
+ Any message with a content type that is disabled will be refused.
+ One example would be to disable the Pickle serializer:
+
+ >>> from kombu.serialization import registry
+ # by name
+ >>> registry.disable('pickle')
+ # or by mime-type.
+ >>> registry.disable('application/x-python-serialize')
+
+.. _version-1.5.0:
+
+1.5.0
+=====
+:release-date: 2011-11-27 06:00 P.M GMT
+:release-by: Ask Solem
+
+* kombu.pools: Fixed a bug resulting in resources not being properly released.
+
+ This was caused by the use of ``__hash__`` to distinguish them.
+
+* Virtual transports: Dead-letter queue is now disabled by default.
+
+ The dead-letter queue was enabled by default to help application
+ authors, but now that Kombu is stable it should be removed.
+ There are after all many cases where messages should just be dropped
+ when there are no queues to buffer them, and keeping them without
+ supporting automatic cleanup is rather considered a resource leak
+ than a feature.
+
+ If wanted the dead-letter queue can still be enabled, by using
+ the ``deadletter_queue`` transport option:
+
+ .. code-block:: pycon
+
+ >>> x = Connection('redis://',
+ ... transport_options={'deadletter_queue': 'ae.undeliver'})
+
+ In addition, an :class:`UndeliverableWarning` is now emitted when
+ the dead-letter queue is enabled and a message ends up there.
+
+ Contributed by Ionel Maries Cristian.
+
+* MongoDB transport now supports Replicasets (Issue #81).
+
+ Contributed by Ivan Metzlar.
+
+* The ``Connection.ensure`` methods now accepts a ``max_retries`` value
+ of 0.
+
+ A value of 0 now means *do not retry*, which is distinct from :const:`None`
+ which means *retry indefinitely*.
+
+ Contributed by Dan McGee.
+
+* SQS Transport: Now has a lowercase ``sqs`` alias, so that it can be
+ used with broker URLs (Issue #82).
+
+ Fix contributed by Hong Minhee
+
+* SQS Transport: Fixes KeyError on message acknowledgments (Issue #73).
+
+ The SQS transport now uses UUID's for delivery tags, rather than
+ a counter.
+
+ Fix contributed by Brian Bernstein.
+
+* SQS Transport: Unicode related fixes (Issue #82).
+
+ Fix contributed by Hong Minhee.
+
+* Redis version check could crash because of improper handling of types
+ (Issue #63).
+
+* Fixed error with `Resource.force_close_all` when resources
+ were not yet properly initialized (Issue #78).
+
+.. _version-1.4.3:
+
+1.4.3
+=====
+:release-date: 2011-10-27 10:00 P.M BST
+:release-by: Ask Solem
+
+* Fixes bug in ProducerPool where too many resources would be acquired.
+
+.. _version-1.4.2:
+
+1.4.2
+=====
+:release-date: 2011-10-26 05:00 P.M BST
+:release-by: Ask Solem
+
+* Eventio: Polling should ignore `errno.EINTR`
+
+* SQS: str.encode did only start accepting kwargs after Py2.7.
+
+* simple_task_queue example didn't run correctly (Issue #72).
+
+ Fix contributed by Stefan Eletzhofer.
+
+* Empty messages would not raise an exception not able to be handled
+ by `on_decode_error` (Issue #72)
+
+ Fix contributed by Christophe Chauvet.
+
+* CouchDB: Properly authenticate if user/password set (Issue #70)
+
+ Fix contributed by Rafael Duran Castaneda
+
+* Connection.Consumer had the wrong signature.
+
+ Fix contributed by Pavel Skvazh
+
+.. _version-1.4.1:
+
+1.4.1
+=====
+:release-date: 2011-09-26 04:00 P.M BST
+:release-by: Ask Solem
+
+* 1.4.0 broke the producer pool, resulting in new connections being
+ established for every acquire.
+
+
+.. _version-1.4.0:
+
+1.4.0
+=====
+:release-date: 2011-09-22 05:00 P.M BST
+:release-by: Ask Solem
+
+* Adds module :mod:`kombu.mixins`.
+
+ This module contains a :class:`~kombu.mixins.ConsumerMixin` class
+ that can be used to easily implement a message consumer
+ thread that consumes messages from one or more
+ :class:`kombu.Consumer` instances.
+
+* New example: :ref:`task-queue-example`
+
+ Using the ``ConsumerMixin``, default channels and
+ the global connection pool to demonstrate new Kombu features.
+
+* MongoDB transport did not work with MongoDB >= 2.0 (Issue #66)
+
+ Fix contributed by James Turk.
+
+* Redis-py version check did not account for beta identifiers
+ in version string.
+
+ Fix contributed by David Ziegler.
+
+* Producer and Consumer now accepts a connection instance as the
+ first argument.
+
+ The connections default channel will then be used.
+
+ In addition shortcut methods has been added to Connection:
+
+ .. code-block:: pycon
+
+ >>> connection.Producer(exchange)
+ >>> connection.Consumer(queues=..., callbacks=...)
+
+* Connection has aquired a ``connected`` attribute that
+ can be used to check if the connection instance has established
+ a connection.
+
+* ``ConnectionPool.acquire_channel`` now returns the connections
+ default channel rather than establising a new channel that
+ must be manually handled.
+
+* Added ``kombu.common.maybe_declare``
+
+ ``maybe_declare(entity)`` declares an entity if it has
+ not previously been declared in the same process.
+
+* :func:`kombu.compat.entry_to_queue` has been moved to :mod:`kombu.common`
+
+* New module :mod:`kombu.clocks` now contains an implementation
+ of Lamports logical clock.
+
+.. _version-1.3.5:
+
+1.3.5
+=====
+:release-date: 2011-09-16 06:00 P.M BST
+:release-by: Ask Solem
+
+* Python 3: AMQP_PROTOCOL_HEADER must be bytes, not str.
+
+.. _version-1.3.4:
+
+1.3.4
+=====
+:release-date: 2011-09-16 06:00 P.M BST
+:release-by: Ask Solem
+
+* Fixes syntax error in pools.reset
+
+
+.. _version-1.3.3:
+
+1.3.3
+=====
+:release-date: 2011-09-15 02:00 P.M BST
+:release-by: Ask Solem
+
+* pools.reset did not support after forker arguments.
+
+.. _version-1.3.2:
+
+1.3.2
+=====
+:release-date: 2011-09-10 01:00 P.M BST
+:release-by: Mher Movsisyan
+
+* Broke Python 2.5 compatibility by importing ``parse_qsl`` from ``urlparse``
+
+* Connection.default_channel is now closed when connection is revived
+ after connection failures.
+
+* Pika: Channel now supports the ``connection.client`` attribute
+ as required by the simple interface.
+
+* pools.set_limit now raises an exception if the limit is lower
+ than the previous limit.
+
+* pools.set_limit no longer resets the pools.
+
+.. _version-1.3.1:
+
+1.3.1
+=====
+:release-date: 2011-10-07 03:00 P.M BST
+:release-by: Ask Solem
+
+* Last release broke after fork for pool reinitialization.
+
+* Producer/Consumer now has a ``connection`` attribute,
+ giving access to the :class:`Connection` of the
+ instance.
+
+* Pika: Channels now have access to the underlying
+ :class:`Connection` instance using ``channel.connection.client``.
+
+ This was previously required by the ``Simple`` classes and is now
+ also required by :class:`Consumer` and :class:`Producer`.
+
+* Connection.default_channel is now closed at object revival.
+
+* Adds kombu.clocks.LamportClock.
+
+* compat.entry_to_queue has been moved to new module :mod:`kombu.common`.
+
+.. _version-1.3.0:
+
+1.3.0
+=====
+:release-date: 2011-10-05 01:00 P.M BST
+:release-by: Ask Solem
+
+* Broker connection info can be now be specified using URLs
+
+ The broker hostname can now be given as a URL instead, of the format:
+
+ .. code-block:: text
+
+ transport://user:password@hostname:port/virtual_host
+
+ for example the default broker is expressed as:
+
+ .. code-block:: pycon
+
+ >>> Connection('amqp://guest:guest@localhost:5672//')
+
+ Transport defaults to amqp, and is not required.
+ user, password, port and virtual_host is also not mandatory and
+ will default to the corresponding transports default.
+
+ .. note::
+
+ Note that the path component (virtual_host) always starts with a
+ forward-slash. This is necessary to distinguish between the virtual
+ host '' (empty) and '/', which are both acceptable virtual host names.
+
+ A virtual host of '/' becomes::
+
+ .. code-block:: text
+
+ amqp://guest:guest@localhost:5672//
+
+ and a virtual host of '' (empty) becomes:
+
+ .. code-block:: text
+
+ amqp://guest:guest@localhost:5672/
+
+ So the leading slash in the path component is **always required**.
+
+* Now comes with default global connection and producer pools.
+
+ The acquire a connection using the connection parameters
+ from a :class:`Connection`:
+
+ .. code-block:: pycon
+
+ >>> from kombu import Connection, connections
+ >>> connection = Connection('amqp://guest:guest@localhost//')
+ >>> with connections[connection].acquire(block=True):
+ ... # do something with connection
+
+ To acquire a producer using the connection parameters
+ from a :class:`Connection`:
+
+ .. code-block:: pycon
+
+ >>> from kombu import Connection, producers
+ >>> connection = Connection('amqp://guest:guest@localhost//')
+ >>> with producers[connection].acquire(block=True):
+ ... producer.publish({'hello': 'world'}, exchange='hello')
+
+ Acquiring a producer will in turn also acquire a connection
+ from the associated pool in ``connections``, so you the number
+ of producers is bound the same limit as number of connections.
+
+ The default limit of 100 connections per connection instance
+ can be changed by doing:
+
+ .. code-block:: pycon
+
+ >>> from kombu import pools
+ >>> pools.set_limit(10)
+
+ The pool can also be forcefully closed by doing:
+
+ .. code-block:: pycon
+
+ >>> from kombu import pools
+ >>> pool.reset()
+
+* SQS Transport: Persistence using SimpleDB is now disabled by default,
+ after reports of unstable SimpleDB connections leading to errors.
+
+* :class:`Producer` can now be used as a context manager.
+
+* ``Producer.__exit__`` now properly calls ``release`` instead of close.
+
+ The previous behavior would lead to a memory leak when using
+ the :class:`kombu.pools.ProducerPool`
+
+* Now silences all exceptions from `import ctypes` to match behaviour
+ of the standard Python uuid module, and avoid passing on MemoryError
+ exceptions on SELinux-enabled systems (Issue #52 + Issue #53)
+
+* ``amqp`` is now an alias to the ``amqplib`` transport.
+
+* ``kombu.syn.detect_environment`` now returns 'default', 'eventlet', or
+ 'gevent' depending on what monkey patches have been installed.
+
+* Serialization registry has new attribute ``type_to_name`` so it is
+ possible to lookup serializater name by content type.
+
+* Exchange argument to ``Producer.publish`` can now be an :class:`Exchange`
+ instance.
+
+* ``compat.Publisher`` now supports the ``channel`` keyword argument.
+
+* Acking a message on some transports could lead to :exc:`KeyError` being
+ raised (Issue #57).
+
+* Connection pool: Connections are no long instantiated when the pool is
+ created, but instantiated as needed instead.
+
+* Tests now pass on PyPy.
+
+* ``Connection.as_uri`` now includes the password if the keyword argument
+ ``include_password`` is set.
+
+* Virtual transports now comes with a default ``default_connection_params``
+ attribute.
+
+.. _version-1.2.1:
+
+1.2.1
+=====
+:release-date: 2011-07-29 12:52 P.M BST
+:release-by: Ask Solem
+
+* Now depends on amqplib >= 1.0.0.
+
+* Redis: Now automatically deletes auto_delete queues at ``basic_cancel``.
+
+* ``serialization.unregister`` added so it is possible to remove unwanted
+ seralizers.
+
+* Fixes MemoryError while importing ctypes on SELinux (Issue #52).
+
+* ``Connection.autoretry`` is a version of ``ensure`` that works
+ with arbitrary functions (i.e. it does not need an associated object
+ that implements the ``revive`` method.
+
+ Example usage:
+
+ .. code-block:: python
+
+ channel = connection.channel()
+ try:
+ ret, channel = connection.autoretry(send_messages, channel=channel)
+ finally:
+ channel.close()
+
+* ``ConnectionPool.acquire`` no longer force establishes the connection.
+
+ The connection will be established as needed.
+
+* ``Connection.ensure`` now supports an ``on_revive`` callback
+ that is applied whenever the connection is re-established.
+
+* ``Consumer.consuming_from(queue)`` returns True if the Consumer is
+ consuming from ``queue``.
+
+* ``Consumer.cancel_by_queue`` did not remove the queue from ``queues``.
+
+* ``compat.ConsumerSet.add_queue_from_dict`` now automatically declared
+ the queue if ``auto_declare`` set.
+
+.. _version-1.2.0:
+
+1.2.0
+=====
+:release-date: 2011-07-15 12:00 P.M BST
+:release-by: Ask Solem
+
+* Virtual: Fixes cyclic reference in Channel.close (Issue #49).
+
+* Producer.publish: Can now set additional properties using keyword
+ arguments (Issue #48).
+
+* Adds Queue.no_ack option to control the no_ack option for individual queues.
+
+* Recent versions broke pylibrabbitmq support.
+
+* SimpleQueue and SimpleBuffer can now be used as contexts.
+
+* Test requirements specifies PyYAML==3.09 as 3.10 dropped Python 2.4 support
+
+* Now properly reports default values in Connection.info/.as_uri
+
+.. _version-1.1.6:
+
+1.1.6
+=====
+:release-date: 2011-06-13 04:00 P.M BST
+:release-by: Ask Solem
+
+* Redis: Fixes issue introduced in 1.1.4, where a redis connection
+ failure could leave consumer hanging forever.
+
+* SQS: Now supports fanout messaging by using SimpleDB to store routing
+ tables.
+
+ This can be disabled by setting the `supports_fanout` transport option:
+
+ >>> Connection(transport='SQS',
+ ... transport_options={'supports_fanout': False})
+
+* SQS: Now properly deletes a message when a message is acked.
+
+* SQS: Can now set the Amazon AWS region, by using the ``region``
+ transport option.
+
+* amqplib: Now uses `localhost` as default hostname instead of raising an
+ error.
+
+.. _version-1.1.5:
+
+1.1.5
+=====
+:release-date: 2011-06-07 06:00 P.M BST
+:release-by: Ask Solem
+
+* Fixes compatibility with redis-py 2.4.4.
+
+.. _version-1.1.4:
+
+1.1.4
+=====
+:release-date: 2011-06-07 04:00 P.M BST
+:release-by: Ask Solem
+
+* Redis transport: Now requires redis-py version 2.4.4 or later.
+
+* New Amazon SQS transport added.
+
+ Usage:
+
+ >>> conn = Connection(transport='SQS',
+ ... userid=aws_access_key_id,
+ ... password=aws_secret_access_key)
+
+ The environment variables :envvar:`AWS_ACCESS_KEY_ID` and
+ :envvar:`AWS_SECRET_ACCESS_KEY` are also supported.
+
+* librabbitmq transport: Fixes default credentials support.
+
+* amqplib transport: Now supports `login_method` for SSL auth.
+
+ :class:`Connection` now supports the `login_method`
+ keyword argument.
+
+ Default `login_method` is ``AMQPLAIN``.
+
+.. _version-1.1.3:
+
+1.1.3
+=====
+:release-date: 2011-04-21 04:00 P.M CEST
+:release-by: Ask Solem
+
+* Redis: Consuming from multiple connections now works with Eventlet.
+
+* Redis: Can now perform channel operations while the channel is in
+ BRPOP/LISTEN mode (Issue #35).
+
+ Also the async BRPOP now times out after 1 second, this means that
+ canceling consuming from a queue/starting consuming from additional queues
+ has a latency of up to one second (BRPOP does not support subsecond
+ timeouts).
+
+* Virtual: Allow channel objects to be closed multiple times without error.
+
+* amqplib: ``AttributeError`` has been added to the list of known
+ connection related errors (:attr:`Connection.connection_errors`).
+
+* amqplib: Now converts :exc:`SSLError` timeout errors to
+ :exc:`socket.timeout` (http://bugs.python.org/issue10272)
+
+* Ensures cyclic references are destroyed when the connection is closed.
+
+.. _version-1.1.2:
+
+1.1.2
+=====
+:release-date: 2011-04-06 04:00 P.M CEST
+:release-by: Ask Solem
+
+* Redis: Fixes serious issue where messages could be lost.
+
+ The issue could happen if the message exceeded a certain number
+ of kilobytes in size.
+
+ It is recommended that all users of the Redis transport should
+ upgrade to this version, even if not currently experiencing any
+ issues.
+
+.. _version-1.1.1:
+
+1.1.1
+=====
+:release-date: 2011-04-05 03:51 P.M CEST
+:release-by: Ask Solem
+
+* 1.1.0 started using ``Queue.LifoQueue`` which is only available
+ in Python 2.6+ (Issue #33). We now ship with our own LifoQueue.
+
+
+.. _version-1.1.0:
+
+1.1.0
+=====
+:release-date: 2011-04-05 01:05 P.M CEST
+:release-by: Ask Solem
+
+.. _v110-important:
+
+Important Notes
+---------------
+
+* Virtual transports: Message body is now base64 encoded by default
+ (Issue #27).
+
+ This should solve problems sending binary data with virtual
+ transports.
+
+ Message compatibility is handled by adding a ``body_encoding``
+ property, so messages sent by older versions is compatible
+ with this release. However -- If you are accessing the messages
+ directly not using Kombu, then you have to respect
+ the ``body_encoding`` property.
+
+ If you need to disable base64 encoding then you can do so
+ via the transport options:
+
+ .. code-block:: python
+
+ Connection(transport='...',
+ transport_options={'body_encoding': None})
+
+ **For transport authors**:
+
+ You don't have to change anything in your custom transports,
+ as this is handled automatically by the base class.
+
+ If you want to use a different encoder you can do so by adding
+ a key to ``Channel.codecs``. Default encoding is specified
+ by the ``Channel.body_encoding`` attribute.
+
+ A new codec must provide two methods: ``encode(data)`` and
+ ``decode(data)``.
+
+* ConnectionPool/ChannelPool/Resource: Setting ``limit=None`` (or 0)
+ now disables pool semantics, and will establish and close
+ the resource whenever acquired or released.
+
+* ConnectionPool/ChannelPool/Resource: Is now using a LIFO queue
+ instead of the previous FIFO behavior.
+
+ This means that the last resource released will be the one
+ acquired next. I.e. if only a single thread is using the pool
+ this means only a single connection will ever be used.
+
+* Connection: Cloned connections did not inherit transport_options
+ (``__copy__``).
+
+* contrib/requirements is now located in the top directory
+ of the distribution.
+
+* MongoDB: Now supports authentication using the ``userid`` and ``password``
+ arguments to :class:`Connection` (Issue #30).
+
+* Connection: Default autentication credentials are now delegated to
+ the individual transports.
+
+ This means that the ``userid`` and ``password`` arguments to
+ Connection is no longer *guest/guest* by default.
+
+ The amqplib and pika transports will still have the default
+ credentials.
+
+* :meth:`Consumer.__exit__` did not have the correct signature (Issue #32).
+
+* Channel objects now have a ``channel_id`` attribute.
+
+* MongoDB: Version sniffing broke with development versions of
+ mongod (Issue #29).
+
+* New environment variable :envvar:`KOMBU_LOG_CONNECTION` will now emit debug
+ log messages for connection related actions.
+
+ :envvar:`KOMBU_LOG_DEBUG` will also enable :envvar:`KOMBU_LOG_CONNECTION`.
+
+.. _version-1.0.7:
+
+1.0.7
+=====
+:release-date: 2011-03-28 05:45 P.M CEST
+:release-by: Ask Solem
+
+* Now depends on anyjson 0.3.1
+
+ cjson is no longer a recommended json implementation, and anyjson
+ will now emit a deprecation warning if used.
+
+* Please note that the Pika backend only works with version 0.5.2.
+
+ The latest version (0.9.x) drastically changed API, and it is not
+ compatible yet.
+
+* on_decode_error is now called for exceptions in message_to_python
+ (Issue #24).
+
+* Redis: did not respect QoS settings.
+
+* Redis: Creating a connection now ensures the connection is established.
+
+ This means ``Connection.ensure_connection`` works properly with
+ Redis.
+
+* consumer_tag argument to ``Queue.consume`` can't be :const:`None`
+ (Issue #21).
+
+ A None value is now automatically converted to empty string.
+ An empty string will make the server generate a unique tag.
+
+* Connection now supports a ``transport_options`` argument.
+
+ This can be used to pass additional arguments to transports.
+
+* Pika: ``drain_events`` raised :exc:`socket.timeout` even if no timeout
+ set (Issue #8).
+
+.. version-1.0.6:
+
+1.0.6
+=====
+:release-date: 2011-03-22 04:00 P.M CET
+:release-by: Ask Solem
+
+* The ``delivery_mode`` aliases (persistent/transient) were not automatically
+ converted to integer, and would cause a crash if using the amqplib
+ transport.
+
+* Redis: The redis-py :exc:`InvalidData` exception suddenly changed name to
+ :exc:`DataError`.
+
+* The :envvar:`KOMBU_LOG_DEBUG` environment variable can now be set to log all
+ channel method calls.
+
+ Support for the following environment variables have been added:
+
+ * :envvar:`KOMBU_LOG_CHANNEL` will wrap channels in an object that
+ logs every method call.
+
+ * :envvar:`KOMBU_LOG_DEBUG` both enables channel logging and configures the
+ root logger to emit messages to standard error.
+
+ **Example Usage**:
+
+ .. code-block:: console
+
+ $ KOMBU_LOG_DEBUG=1 python
+ >>> from kombu import Connection
+ >>> conn = Connection()
+ >>> channel = conn.channel()
+ Start from server, version: 8.0, properties:
+ {u'product': 'RabbitMQ',.............. }
+ Open OK! known_hosts []
+ using channel_id: 1
+ Channel open
+ >>> channel.queue_declare('myq', passive=True)
+ [Kombu channel:1] queue_declare('myq', passive=True)
+ (u'myq', 0, 1)
+
+.. _version-1.0.5:
+
+1.0.5
+=====
+:release-date: 2011-03-17 04:00 P.M CET
+:release-by: Ask Solem
+
+* Fixed memory leak when creating virtual channels. All virtual transports
+ affected (redis, mongodb, memory, django, sqlalchemy, couchdb, beanstalk).
+
+* Virtual Transports: Fixed potential race condition when acking messages.
+
+ If you have been affected by this, the error would show itself as an
+ exception raised by the OrderedDict implementation. (``object no longer
+ exists``).
+
+* MongoDB transport requires the ``findandmodify`` command only available in
+ MongoDB 1.3+, so now raises an exception if connected to an incompatible
+ server version.
+
+* Virtual Transports: ``basic.cancel`` should not try to remove unknown
+ consumer tag.
+
+.. _version-1.0.4:
+
+1.0.4
+=====
+:release-date: 2011-02-28 04:00 P.M CET
+:release-by: Ask Solem
+
+* Added Transport.polling_interval
+
+ Used by django-kombu to increase the time to sleep between SELECTs when
+ there are no messages in the queue.
+
+ Users of django-kombu should upgrade to django-kombu v0.9.2.
+
+.. _version-1.0.3:
+
+1.0.3
+=====
+:release-date: 2011-02-12 04:00 P.M CET
+:release-by: Ask Solem
+
+* ConnectionPool: Re-connect if amqplib connection closed
+
+* Adds ``Queue.as_dict`` + ``Exchange.as_dict``.
+
+* Copyright headers updated to include 2011.
+
+.. _version-1.0.2:
+
+1.0.2
+=====
+:release-date: 2011-01-31 10:45 P.M CET
+:release-by: Ask Solem
+
+* amqplib: Message properties were not set properly.
+* Ghettoq backend names are now automatically translated to the new names.
+
+.. _version-1.0.1:
+
+1.0.1
+=====
+:release-date: 2011-01-28 12:00 P.M CET
+:release-by: Ask Solem
+
+* Redis: Now works with Linux (epoll)
+
+.. _version-1.0.0:
+
+1.0.0
+=====
+:release-date: 2011-01-27 12:00 P.M CET
+:release-by: Ask Solem
+
+* Initial release
+
+.. _version-0.1.0:
+
+0.1.0
+=====
+:release-date: 2010-07-22 04:20 P.M CET
+:release-by: Ask Solem
+
+* Initial fork of carrot