Connections and transports¶
To send and receive messages you need a transport and a connection. There are several transports to choose from (amqp, librabbitmq, redis, qpid, in-memory, etc.), and you can even create your own. The default transport is amqp.
Create a connection using the default transport:
>>> from kombu import Connection >>> connection = Connection('amqp://guest:guest@localhost:5672//')
The connection will not be established yet, as the connection is established
when needed. If you want to explicitly establish the connection
you have to call the
You can also check whether the connection is connected:
>>> connection.connected True
Connections must always be closed after use:
But best practice is to release the connection instead, this will release the resource if the connection is associated with a connection pool, or close the connection if not, and makes it easier to do the transition to connection pools later:
Of course, the connection can be used as a context, and you are encouraged to do so as it makes it harder to forget releasing open resources:
with Connection() as connection: # work with connection
Connection parameters can be provided as an URL in the format:
All of these are valid URLs:
# Specifies using the amqp transport only, default values # are taken from the keyword arguments. amqp:// # Using Redis redis://localhost:6379/ # Using Redis over a Unix socket redis+socket:///tmp/redis.sock # Using Qpid qpid://localhost/ # Using virtual host '/foo' amqp://localhost//foo # Using virtual host 'foo' amqp://localhost/foo
The query part of the URL can also be used to set options, e.g.:
See Keyword arguments for a list of supported options.
A connection without options will use the default connection settings, which is using the localhost host, default port, user name guest, password guest and virtual host “/”. A connection without arguments is the same as:
The default port is transport specific, for AMQP this is 5672.
Other fields may also have different meaning depending on the transport used. For example, the Redis transport uses the virtual_host argument as the redis database number.
Connection class supports additional
keyword arguments, these are:
|hostname:||Default host name if not provided in the URL.|
|userid:||Default user name if not provided in the URL.|
|password:||Default password if not provided in the URL.|
|virtual_host:||Default virtual host if not provided in the URL.|
|port:||Default port if not provided in the URL.|
|transport:||Default transport if not provided in the URL.
Can be a string specifying the path to the class. (e.g.
|ssl:||Use SSL to connect to the server. Default is
|insist:||Insist on connecting to a server. No longer supported, relic from AMQP 0.8|
|Timeout in seconds for connecting to the server. May not be supported by the specified transport.|
|A dict of additional connection arguments to pass to alternate kombu channel implementations. Consult the transport documentation for available options.|
There are 4 transports available for AMQP use.
pyamqpuses the pure Python library
amqp, automatically installed with Kombu.
librabbitmquses the high performance transport written in C. This requires the
librabbitmqPython package to be installed, which automatically compiles the C library.
amqptries to use
librabbitmqbut falls back to
qpiduses the pure Python library
qpid.messaging, automatically installed with Kombu. The Qpid library uses AMQP, but uses custom extensions specifically supported by the Apache Qpid Broker.
For the highest performance, you should install the
To ensure librabbitmq is used, you can explicitly specify it in the
transport URL, or use
amqp to have the fallback.
|SQS||Virtual||Yes||Yes ||Yes |
|||(1, 2, 3, 4, 5, 6, 7) Declarations only kept in memory, so exchanges/queues must be declared by all clients that needs them.|
|||Fanout supported via storing routing tables in SimpleDB.
Disabled by default, but can be enabled by using the