b-rabbit 1.2.5
An abstract interface for RabbitMQ communication
License: MIT license
Requires Python: >=3.4
Keywords: b_rabbit,rabbitmq,RabbitMQ,Microservices,SOA,MQTT,AMQP,Queues,Messaging queue,queue messaging,publish-subscribe,publish-pattern,subscribe-pattern,publish messaging,subscribe messaging,remote procedure call,RPC

========
b-rabbit
========

.. image:: assets/b-rabbit.png
    :width: 100
    :align: center
    :alt: b-rabbit-icon

.. image:: https://img.shields.io/pypi/v/b-rabbit.svg
        :target: https://pypi.python.org/pypi/b-rabbit

.. image:: https://img.shields.io/travis/nidhaloff/b_rabbit.svg
        :target: https://travis-ci.com/nidhaloff/b-rabbit

.. image:: https://readthedocs.org/projects/b-rabbit/badge/?version=latest
        :target: https://b-rabbit.readthedocs.io/en/latest/?badge=latest

.. image:: https://img.shields.io/pypi/pyversions/b-rabbit
        :alt: PyPI - Python Version
        :target: https://b-rabbit.readthedocs.io/en/latest/?badge=latest

.. image:: https://img.shields.io/pypi/wheel/b-rabbit
        :alt: PyPI - Wheel
        :target: https://pypi.python.org/pypi/b-rabbit


.. image:: https://pepy.tech/badge/b-rabbit
    :target: https://pepy.tech/project/b-rabbit

.. image:: https://img.shields.io/twitter/url?url=https%3A%2F%2Ftwitter.com%2FNidhalBaccouri
        :alt: Twitter URL
        :target: https://twitter.com/NidhalBaccouri




RabbitMQ without headache.
---------------------------

b-rabbit is a RabbitMq client library that aims to make interfacing with RabbitMQ easier. It is very useful especially
inside large projects, in which many boilerplate code must be written.

I started this project when I was working on a large microservices-based project in a large team.
I decided to open-source the project afterwards.



* Free software: MIT license
* Documentation: https://b-rabbit.readthedocs.io.

Features
--------

- it implements all RabbitMQ messaging patterns.
- provides an easy high level API (take a look at the examples)
- thread safe

When you should use it
----------------------
- if you are having problems with other non thread safe libraries (like I did)
- if you want to develop fast by using a high level API
- if you don't want to write much code and save much time
- if you want to use multithreading


Quick Usage
------------

import the library:

.. code-block:: python


    from b_rabbit import BRabbit

create a parent instance which provide a global rabbitMQ connection

.. code-block:: python

    rabbit = BRabbit(host='localhost', port=5672)

now, just one liner to publish a message:

.. code-block:: python

    publisher = rabbit.EventPublisher(b_rabbit=rabbit,
                                      publisher_name='pub').publish(routing_key='testing.test',
                                                                    payload='Hello from publisher')



or if you want to subscribe and listen to a certain topic:

.. code-block:: python

     def callback(msg):
        # do something with the received msg from the publisher
        print(f"msg received: {msg}")

    # subscribe and run a listener in a thread

    subscriber = rabbit.EventSubscriber(
                                    b_rabbit=rabbit,
                                    routing_key='testing.test',
                                    publisher_name='pub',
                                    event_listener=callback).subscribe_on_thread()

Advanced Usage using RPC
--------------------------

- task requester

.. code-block:: python

    from b_rabbit import BRabbit


    def taskResponseListener(body):
        print('Task Response received')
        print(str(body))


    rabbit = BRabbit(host='localhost', port=5672)
    taskRequesterSynchron = rabbit.TaskRequesterSynchron(b_rabbit=rabbit,
                                                         executor_name='test',
                                                         routing_key='testing.test',
                                                         response_listener=taskResponseListener)

    taskRequesterSynchron.request_task('msg from requester')
    rabbit.close_connection()

- task responser (server)

.. code-block:: python

    from b_rabbit import BRabbit
    import time

    rabbit = BRabbit(host='localhost', port=5672)


    def taskListener(server, body):
        print('Task Request received')
        print(str(body))
        time.sleep(5)
        server.send_return(payload="return this value to requester")


    taskExecuter = rabbit.TaskExecutor(b_rabbit=rabbit,
                                       executor_name='test',
                                       routing_key='testing.test',
                                       task_listener=taskListener).run_task_on_thread()


Further
--------

Take a look in the examples folder for more. b_rabbit implements also the remote procedure call (RPC) pattern