Skip to main content

Django wrapper for nameko microservice framework.

Project description


Travis-CI Coverage Status

Branch Build status
master Build Status
develop Build Status

Django wrapper for Nameko microservice framework.


tested with

  • python 2.7, 3.5, 3.6, 3.7
  • django 1.11, 2.0, 2.1, 2.2
  • nameko 2.11, 2.12

How to use

from django_nameko import get_pool           

# Within some view or model:
with get_pool().next() as rpc:


pip install django-nameko


# Config to be passed to ClusterRpcProxy 
    'AMQP_URI': 'amqp://'

# Number of proxies to create 
# Each proxy is a single threaded standalone ClusterRpcProxy
# Set timeout for RPC
NAMEKO_TIMEOUT = 15  # timeout 15 seconds
# Add this dictionary to context_data of every RPC
    'hostname': ""

# Create multiple ClusterRpcProxy pool each one assoiate with a name
# Every pool with pool name different than 'default' will use 'default' pool config as default configuration
    'default': {
        'AMQP_URI': 'amqp://',
        'POOL_SIZE': 4,
        'POOL_CONTEXT_DATA': {"common": "multi"},
        'POOL_TIMEOUT': None
    'pool1': {
        'AMQP_URI': 'amqp://pool2',
        'POOL_CONTEXT_DATA': {"name": "pool1", "data": 123},
    'pool2': {
        'AMQP_URI': 'amqp://pool3',
        'POOL_CONTEXT_DATA': {"name": "pool2", "data": 321},
        'POOL_TIMEOUT': 60
    'pool3': {
        'POOL_SIZE': 8,
        'POOL_TIMEOUT': 60
# Use multi pool by putting pool name in get_pool(..)
from django_nameko import get_pool

with get_pool('pool1').next() as rpc:
# call get_pool() without argument will return the 'default' pool
# but you can override the rpc context data before call, example below.
# it will auto revert back to POOL_CONTEXT_DATA when exit the with block
with get_pool().next() as rpc:['SMTP_SECRET'] = 'SECRETXXX'

# try to call rpc outside of with statement block will raise an AttributeError exception 
#   File "/usr/local/lib/python2.7/site-packages/django_nameko/", line 69, in __getattr__
#     raise AttributeError(item)
# AttributeError: mailer

# New feature (from 0.7.0):
# To dispatch event to any service event listener, for example you have this nameko service:
from import event_handler
class EchoService(object):
    name = 'echo'

    @event_handler("echo", "ping")
    def handle_event(self, payload):
        print("service echo received:%s", payload)
# You can sent an event signal to all service listener like this 
from django_nameko import dispatch
dispatch("echo", "ping", {"payload": {"data": 0}})


to run the tests:

  1. run a local rabbitmq
  2. execute tox
docker run --rm -p 15672:15672 -p 5672:5672 -p 5671:5671 --name nameko-rabbitmq nameko/nameko-rabbitmq:3.6.6
# open another shell then run
python test
# to run full test with coverage use


Thanks to guys who made an awesome Nameko framework.


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

django-nameko-0.8.2.tar.gz (22.2 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page