Skip to main content

A developer-friendly library for integrating RabbitMQ with Django applications.

Project description

ApexMQ

ApexMQ is a Django application designed to manage RabbitMQ connections and message consumers efficiently. It supports setting up RabbitMQ connections, creating channels and queues, and processing messages from RabbitMQ queues.

Features

  • RabbitMQ Connection Management: Establish and manage RabbitMQ connections.
  • Channel and Queue Management: Create and manage channels and queues within RabbitMQ.
  • Autoreload Support: Automatically reconfigure RabbitMQ connections when code changes are detected (in DEBUG mode).
  • Class-Based Consumers: Automatically register consumer classes in consumers.py.
  • Message Production: Easily send messages to multiple queues using a producer.

Installation

To use ApexMQ in your Django project, follow these steps:

  1. Install ApexMQ Library
pip install apexmq
  1. Add ApexMQ to your Django Project

    Add apexmq to the INSTALLED_APPS list in your Django project's settings.py:

    INSTALLED_APPS = [
        ...
        'apexmq',
        ...
    ]
    
  2. Configure ApexMQ Settings

    Define ApexMQ settings in your Django settings.py file:

    APEXMQ_SETTINGS = {
        "CONNECTIONS":{
            "default": {
                "USER": "your_username",
                "PASSWORD": "your_password",
                "HOST": "localhost",
                "PORT": 5672, # optional
                "VIRTUAL_HOST": "/", # optional
                "CONNECTION_TIMEOUT": 10, # optional
                "HEARTBEAT": 60, # optional
                "MAX_RETRIES": 5, # optional
                "RETRY_DELAY": 5, # optional
                "CHANNELS": {
                    "channel_name": {
                        "QUEUES": {
                            "queue_name": {
                                "DURABLE": True, # optional
                                "EXCLUSIVE": False, # optional
                                "PASSIVE": False, # optional
                                "AUTO_DELETE": False, # optional
                                "AUTO_ACK": True, # optional
                            }
                        }
                    }
                },
            }
        }
    }
    
  3. Usages of Consumer 3.1 Create a Consumer To create a custom consumer, subclass BaseConsumer and define methods to handle specific actions:

    # your_app/consumers.py
    
    from apexmq.consumers import BaseConsumer
    
    class MyCustomConsumer(BaseConsumer):
        lookup_prefix = "prefix"
    
        def created(self, data):
            """
            This method will get data for action type: prefix.created
            """
            print("You can handle ")
    
        def custom_action(self, data):
            """
            This method is for handle action type: prefix.custom.action
            """
            print(f"Handling 'some_action' with data: {data}")
    

    Note: There's no need to manually register your consumer class. ApexMQ automatically discovers and registers all consumers defined in your_app/consumers.py.

    3.2 Handle Multiple Actions in One Consumer You can define multiple methods in your consumer class to handle different actions. The method name should match the suffix of the action type you're handling. For example:

    • If the action type is user.created, ApexMQ will call the created() method.

    • If the action type is user.updated, it will call the updated() method.

      3.2 Consume Decorator You can consume messages using the on_consume decorator. This decorator registers a function as a handler for a specific action.

    from apexmq.consumers import on_consume
    
    @on_consume("user.created")
    def user_create(data: dict):
        # Handle user.created action
        print(f"User created: {data}")
    

  1. Usages of Producers ApexMQ provides a simple way to publish messages to multiple RabbitMQ queues. The producer can be imported from apexmq.producers and allows you to send messages to multiple queues in one call. 5.1. Using the Producer To send messages, use the producer() function:
from apexmq.producers import publish, on_model_create, on_model_update, on_model_delete

# In to there for to you can add "broadcast" or ["queue1", "queue2"] for send data

# Send a message to multiple queues
publish(
    action="user.created",
    data={"id": 1, "username": "janedoe", "email": "jan@example.com"},
    to=["products", "inventory", "notifications"]
)

# this function will send id and name fields to "queue1", "queue2" queues action as "user.create".
# if you didnt provide action action will autocreate as modelname.create
on_model_create(User, ["queue1", "queue2"], ["id", "name"], "user.create")

# this function will send id and email fields to "queue1", "queue2" queues action as "user.update".
# if you didnt provide action action will autocreate as modelname.update
on_model_update(User, ["queue1", "queue2"], ["id", "email"], "user.update")

# now in this developer have more flexibility when model update. need to return tuple (action:str, data:dict)
@on_model_update(User, ["queue1", "queue2"])
def on_user_update(instance):
    return (
        "user.customaction",
        {
            "id": instance.id,
            "name": instance.name,
            "email": instance.email,
            "custom_field" custom_value
        }
    )

# this function will send id field to "queue1", "queue2" queues action as "user.deleted".
# if you didnt provide action action will autocreate as modelname.deleted
on_model_delete(User, ["queue1", "queue2"], "user.delete")
  • action: The action type associated with the message (e.g., user.created).
  • data: The message body, typically a dictionary.
  • to: A list of queue names to send the message to.

5.2. Example Use Case

For example, when a user is created in your system, you can send a message to the products, inventory, and notifications queues simultaneously, informing each of these services about the new user.

Summary

With ApexMQ, you can efficiently manage RabbitMQ connections and messages in your Django project:

  • Class-based consumers are automatically registered when defined in your_app/consumers.py.
  • The producer provides an easy-to-use interface for sending messages to multiple queues with a single function call.

ApexMQ simplifies RabbitMQ integration in Django and allows you to focus more on handling business logic instead of managing connections and consumers manually.

Contributing

We welcome contributions! Please follow the steps below to get started:

License

This project is licensed under the MIT License. See the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

apexmq-1.0.3.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

apexmq-1.0.3-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file apexmq-1.0.3.tar.gz.

File metadata

  • Download URL: apexmq-1.0.3.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for apexmq-1.0.3.tar.gz
Algorithm Hash digest
SHA256 594072dd8179ce2a62b23869e3b1e8462c578780be289ee5f4d2fb5372332eef
MD5 9cf0f027f9176b32265edd5c454fffab
BLAKE2b-256 06cfcecf6c65a6c88b9560e3bbcaf84bda89f3f25bdbc98e8e3db19dc7f388ff

See more details on using hashes here.

File details

Details for the file apexmq-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: apexmq-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 16.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for apexmq-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 158b7342e8f5a51922aa99bd3aed535dde9af2eed675e7326bcb514eaae4ae2c
MD5 f49469b3dec087d18610cc452c0f4d92
BLAKE2b-256 21a54c7478cee04d3c72123b293f33cb1a4c0cec1a2c6be0430bf23aa0f4f364

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page