All Projects → mosquito → Aio Pika

mosquito / Aio Pika

Licence: apache-2.0
AMQP 0.9 client designed for asyncio and humans.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Aio Pika

tomodachi
💻 Microservice library / framework using Python's asyncio event loop with full support for HTTP + WebSockets, AWS SNS+SQS, RabbitMQ / AMQP, middleware, etc. Extendable for GraphQL, protobuf, gRPC, among other technologies.
Stars: ✭ 170 (-72.18%)
Mutual labels:  rabbitmq, amqp, asyncio
Aiormq
Pure python AMQP 0.9.1 asynchronous client library
Stars: ✭ 112 (-81.67%)
Mutual labels:  asyncio, rabbitmq, amqp
amqpextra
Golang AMQP on steroids. Reliable connection. Publisher. Consumer.
Stars: ✭ 59 (-90.34%)
Mutual labels:  rabbitmq, amqp
mom
Proof of concept for Message-Oriented-Middleware based architecture.
Stars: ✭ 39 (-93.62%)
Mutual labels:  rabbitmq, amqp
node-carotte-amqp
An amqplib wrapper for microservices
Stars: ✭ 27 (-95.58%)
Mutual labels:  rabbitmq, amqp
Machinery
Machinery is an asynchronous task queue/job queue based on distributed message passing.
Stars: ✭ 5,821 (+852.7%)
Mutual labels:  rabbitmq, amqp
http-proxy-amqp
an amqp connection pool implementation
Stars: ✭ 17 (-97.22%)
Mutual labels:  rabbitmq, amqp
aiorabbit
An AsyncIO RabbitMQ client for Python 3
Stars: ✭ 18 (-97.05%)
Mutual labels:  rabbitmq, asyncio
watermill-amqp
AMQP Pub/Sub for the Watermill project.
Stars: ✭ 27 (-95.58%)
Mutual labels:  rabbitmq, amqp
Benthos
Fancy stream processing made operationally mundane
Stars: ✭ 3,705 (+506.38%)
Mutual labels:  rabbitmq, amqp
rbmq
Simple API for spawning RabbitMQ Producers and Consumers.
Stars: ✭ 20 (-96.73%)
Mutual labels:  rabbitmq, amqp
Pg Amqp Bridge
Send messages to RabbitMQ from PostgreSQL
Stars: ✭ 334 (-45.34%)
Mutual labels:  rabbitmq, amqp
nabbitmq
Node.js library for interacting with RabbitMQ based on RxJS streams
Stars: ✭ 20 (-96.73%)
Mutual labels:  rabbitmq, amqp
docker-rabbitmq-node
🐳 A playground for Docker with RabbitMQ and Node.
Stars: ✭ 32 (-94.76%)
Mutual labels:  rabbitmq, amqp
go-amqp-reconnect
auto reconnecting example for github.com/streadway/amqp Connection & Channel
Stars: ✭ 79 (-87.07%)
Mutual labels:  rabbitmq, amqp
aioamqp consumer
consumer/producer/rpc library built over aioamqp
Stars: ✭ 36 (-94.11%)
Mutual labels:  rabbitmq, asyncio
spring-boot-rabbitMQ
Spring Boot集成rabbitMQ实现消息推送
Stars: ✭ 24 (-96.07%)
Mutual labels:  rabbitmq, amqp
Amqp
Go client for AMQP 0.9.1
Stars: ✭ 4,170 (+582.49%)
Mutual labels:  rabbitmq, amqp
cottontail
Capture all RabbitMQ messages being sent through a broker.
Stars: ✭ 23 (-96.24%)
Mutual labels:  rabbitmq, amqp
Carrot
Carrot is a .NET lightweight library that provides a couple of facilities over RabbitMQ.
Stars: ✭ 14 (-97.71%)
Mutual labels:  rabbitmq, amqp

.. _documentation: https://aio-pika.readthedocs.org/ .. _adopted official RabbitMQ tutorial: https://aio-pika.readthedocs.io/en/latest/rabbitmq-tutorial/1-introduction.html

aio-pika

.. image:: https://readthedocs.org/projects/aio-pika/badge/?version=latest :target: https://aio-pika.readthedocs.org/ :alt: ReadTheDocs

.. image:: https://coveralls.io/repos/github/mosquito/aio-pika/badge.svg?branch=master :target: https://coveralls.io/github/mosquito/aio-pika :alt: Coveralls

.. image:: https://github.com/mosquito/aio-pika/workflows/tox/badge.svg :target: https://github.com/mosquito/aio-pika/actions?query=workflow%3Atox :alt: Github Actions

.. image:: https://img.shields.io/pypi/v/aio-pika.svg :target: https://pypi.python.org/pypi/aio-pika/ :alt: Latest Version

.. image:: https://img.shields.io/pypi/wheel/aio-pika.svg :target: https://pypi.python.org/pypi/aio-pika/

.. image:: https://img.shields.io/pypi/pyversions/aio-pika.svg :target: https://pypi.python.org/pypi/aio-pika/

.. image:: https://img.shields.io/pypi/l/aio-pika.svg :target: https://pypi.python.org/pypi/aio-pika/

A wrapper around aiormq_ for asyncio and humans.

Check out the examples and the tutorial in the documentation_.

If you are a newcomer to RabbitMQ, please start with the adopted official RabbitMQ tutorial_.

.. _aiormq: http://github.com/mosquito/aiormq/

.. note:: Since version 5.0.0 this library doesn't use pika as AMQP connector. Versions below 5.0.0 contains or requires pika's source code.

Features

  • Completely asynchronous API.
  • Object oriented API.
  • Transparent auto-reconnects with complete state recovery with connect_robust (e.g. declared queues or exchanges, consuming state and bindings).
  • Python 3.5+ compatible.
  • For python 3.4 users available aio-pika<4
  • Transparent publisher confirms_ support
  • Transactions_ support

.. _Transactions: https://www.rabbitmq.com/semantics.html .. _publisher confirms: https://www.rabbitmq.com/confirms.html

Installation

.. code-block:: shell

pip install aio-pika

Usage example

Simple consumer:

.. code-block:: python

import asyncio
import aio_pika


async def main(loop):
    connection = await aio_pika.connect_robust(
        "amqp://guest:[email protected]/", loop=loop
    )

    async with connection:
        queue_name = "test_queue"

        # Creating channel
        channel = await connection.channel()    # type: aio_pika.Channel

        # Declaring queue
        queue = await channel.declare_queue(
            queue_name,
            auto_delete=True
        )   # type: aio_pika.Queue

        async with queue.iterator() as queue_iter:
            # Cancel consuming after __aexit__
            async for message in queue_iter:
                async with message.process():
                    print(message.body)

                    if queue.name in message.body.decode():
                        break


if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(loop))
    loop.close()

Simple publisher:

.. code-block:: python

import asyncio
import aio_pika


async def main(loop):
    connection = await aio_pika.connect_robust(
        "amqp://guest:[email protected]/", loop=loop
    )

    routing_key = "test_queue"

    channel = await connection.channel()    # type: aio_pika.Channel

    await channel.default_exchange.publish(
        aio_pika.Message(
            body='Hello {}'.format(routing_key).encode()
        ),
        routing_key=routing_key
    )

    await connection.close()


if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(loop))
    loop.close()

Get single message example:

.. code-block:: python

import asyncio
from aio_pika import connect_robust, Message


async def main(loop):
    connection = await connect_robust(
        "amqp://guest:[email protected]/",
        loop=loop
    )

    queue_name = "test_queue"
    routing_key = "test_queue"

    # Creating channel
    channel = await connection.channel()

    # Declaring exchange
    exchange = await channel.declare_exchange('direct', auto_delete=True)

    # Declaring queue
    queue = await channel.declare_queue(queue_name, auto_delete=True)

    # Binding queue
    await queue.bind(exchange, routing_key)

    await exchange.publish(
        Message(
            bytes('Hello', 'utf-8'),
            content_type='text/plain',
            headers={'foo': 'bar'}
        ),
        routing_key
    )

    # Receiving message
    incoming_message = await queue.get(timeout=5)

    # Confirm message
    await incoming_message.ack()

    await queue.unbind(exchange, routing_key)
    await queue.delete()
    await connection.close()


if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(loop))

There are more examples and the RabbitMQ tutorial in the documentation_.

Versioning

This software follows Semantic Versioning_

For contributors

Setting up development environment


Clone the project:

.. code-block:: shell

git clone https://github.com/mosquito/aio-pika.git
cd aio-pika

Create a new virtualenv for aio-pika_:

.. code-block:: shell

python3 -m venv env
source env/bin/activate

Install all requirements for aio-pika_:

.. code-block:: shell

pip install -e '.[develop]'

Running Tests


NOTE: In order to run the tests locally you need to run a RabbitMQ instance with default user/password (guest/guest) and port (5672).

  • ProTip: Use Docker for this:

.. code-block:: bash

docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:3-management

To test just run:

.. code-block:: bash

make test

Editing Documentation


To iterate quickly on the documentation live in your browser, try:

.. code-block:: bash

nox -s docs -- serve

Creating Pull Requests


Please feel free to create pull requests, but you should describe your use cases and add some examples.

Changes should follow a few simple rules:

  • When your changes break the public API, you must increase the major version.
  • When your changes are safe for public API (e.g. added an argument with default value)
  • You have to add test cases (see tests/ folder)
  • You must add docstrings
  • Feel free to add yourself to "thank's to" section_

.. _"thank's to" section: https://github.com/mosquito/aio-pika/blob/master/docs/source/index.rst#thanks-for-contributing .. _Semantic Versioning: http://semver.org/ .. _aio-pika: https://github.com/mosquito/aio-pika/

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].