Python gRPC client for NATS Go sidecar
Project description
bq-nats-client
Python gRPC client for the NATS Go daemon. Exposes publish, subscribe, and JetStream operations via a thin async API that mirrors nats.py.
Architecture
Python app ──gRPC (Bearer JWT)──► Go daemon ──NATS──► NATS server
The Go daemon runs as its own deployment and owns the NATS connection. This library only connects to it over gRPC — it does not start or bundle the daemon. On the first call the client authenticates with its api-key, gets a short-lived JWT, and attaches it to every request automatically.
Install
pip install bq-nats-client
Configuration
The client reads these env vars (explicit constructor args take precedence):
| Env | Meaning | Default |
|---|---|---|
BQ_NATS_GRPC_ADDR |
address of the running daemon | localhost:50052 |
BQ_NATS_API_KEY |
api-key the daemon verifies (→ JWT) | — |
BQ_NATS_TLS_CA |
CA cert to verify the daemon's TLS cert | — (plaintext) |
Usage
import asyncio
from nats_client import NATSClient, Msg
async def main():
# grpc_addr + api_key come from env, or pass explicitly:
nc = NATSClient(grpc_addr="localhost:50052", api_key="<prime-api-key>")
# plain publish
await nc.publish("orders.new", b'{"id": 1}')
# JetStream
await nc.jetstream()
ack = await nc.js_publish("orders.new", b'{"id": 2}')
print(f"ack: stream={ack.stream} seq={ack.seq}")
# subscribe
async def on_msg(msg: Msg):
print(f"[{msg.subject}] {msg.data}")
await nc.subscribe("orders.>", cb=on_msg)
await asyncio.sleep(10)
await nc.close()
asyncio.run(main())
API
NATSClient(grpc_addr=None, api_key=None, tls_ca=None)
| Method | Description |
|---|---|
publish(subject, payload, reply, headers) |
Core NATS publish |
jetstream(prefix, domain, timeout) |
Configure JetStream context (call once) |
js_publish(subject, payload, ...) → PubAck |
JetStream publish |
subscribe(subject, cb, queue, ...) → Task |
Subscribe; cb fires per message |
close() |
Cancel subscribers and close gRPC channel |
Requirements
- Go daemon running as a separate process/deployment (
just run, or a compiledgo/distbinary) - NATS server reachable from the daemon
- A valid api-key for the daemon to verify
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bq_nats_client-0.1.2.tar.gz.
File metadata
- Download URL: bq_nats_client-0.1.2.tar.gz
- Upload date:
- Size: 61.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35a79ab91ae974a41099864ad1814f6e7ab60d7a92e15968c7b4b91721773364
|
|
| MD5 |
3c3bafb25519aa11728d536a871962cd
|
|
| BLAKE2b-256 |
6d5caf7e393e1a3bec9e8abc07065b6146aec499aa33ddf45991d79ba7a8db22
|
File details
Details for the file bq_nats_client-0.1.2-py3-none-any.whl.
File metadata
- Download URL: bq_nats_client-0.1.2-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec2f9af56b06665dd380bb624ecd71294b95cb63cb5ce903819070c8989e2b2d
|
|
| MD5 |
07fa8f320bb80f59805597c6de407274
|
|
| BLAKE2b-256 |
8cbd8016292f966044c3afb853b512864c4510163d1396dd6006e2c1ec4cafa1
|