No project description provided
Project description
Django NATS
Features
- Wrapper of NATS's nats-py
- Django management command to listen for incoming NATS messages
- Automatically serialize/deserialize message from/to JSON format
- Easy-to-call method for sending NATS messages
Installation
pip install django-nats-client
Setup
-
Add
nats_client
intoINSTALLED_APPS
# settings.py INSTALLED_APPS = [ ... 'nats_client', ]
-
Put NATS connection configuration in settings
# settings.py NATS_OPTIONS = { 'servers': ['nats://localhost:4222'], 'max_reconnect_attempts': 2, 'connect_timeout': 1, ... } NATS_LISTENING_SUBJECT = 'default'
Usage
Listen for messages
-
Create a new callback method and register
# common/nats.py import nats_client @nats_client.register def get_year_from_date(date: str): return date.year # custom name @nats_client.register('get_current_time') def current_time(): return datetime.datetime.now().strftime('%H:%M') # without decorator def current_time(): return datetime.datetime.now().strftime('%H:%M') nats_client.register('get_current_time', current_time)
-
Import previously file in
ready
method of yourapps.py
# common/apps.py class CommonConfig(AppConfig): ... def ready(self): import common.nats
-
Run listener management command
python manage.py nats_listener # or with autoreload enabled (suite for development) python manage.py nats_listener --reload
Sending message
import nats_client
arg = 'some arg'
nats_client.send(
'subject_name',
'method_name',
arg,
keyword_arg=1,
another_keyword_arg=2,
)
Examples
import nats_client
nats_client.send('default', 'new_message', 'Hello, world!')
nats_client.send('default', 'project_created', 1, name='ACME')
Request-Reply
import nats_client
arg = 'some arg'
nats_client.request(
'subject_name',
'method_name',
arg,
keyword_arg=1,
another_keyword_arg=2,
)
Examples
import nats_client
year = nats_client.request('default', 'get_year_from_date', datetime.date(2022, 1, 1)) # 2022
current_time = nats_client.request('default', 'get_current_time') # 12:11
Settings
Key | Required | Default | Description |
---|---|---|---|
NATS_OPTIONS |
Yes | Configuration to be passed in nats.connect() |
|
NATS_LISTENING_SUBJECT |
No | 'default' | Subject for registering callback function |
NATS_REQUEST_TIMEOUT |
No | 1 | Timeout when using request() (in seconds) |
Development
Requirements
- Docker
- Python
- Poetry
Linting
make lint
Testing
make test
Fix Formatting
make yapf
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for django_nats_client-0.3.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3ff5cd9e87d9259b3e60a1b31384bce96f4bbfaf087ec243df5732ac266a1d92 |
|
MD5 | 4e78846a5811c7ac17fa12b90e16d5b5 |
|
BLAKE2b-256 | 83e90553864962c3597806ba59b75f461586cfd0c8e04f7898353c5cabed0f08 |