=====
: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: