This repository was archived by the owner on Feb 7, 2025. It is now read-only.
Release v0.7.0
- Support NATS 2.0🎉. Now the panini stands on shoulders of nats-py v2.0.0
- Support Python 3.10
- Introducing on_start_task
Example:
from panini import app as panini_app
app = panini_app.App(
service_name="js_publish",
host="127.0.0.1",
port=4222,
enable_js=True
)
log = app.logger
NUM = 0
@app.on_start_task()
async def on_start_task():
await app.nats.js_client.add_stream(name="sample-stream-1", subjects=["test.*.stream"])
def get_message():
return {
"id": app.nats.client.client_id,
}
@app.timer_task(interval=2)
async def publish_periodically():
subject = "test.app2.stream"
message = get_message()
global NUM
NUM+=1
message['counter'] = NUM
await app.publish(subject=subject, message=message)
log.info(f"sent {message}")
if __name__ == "__main__":
app.start()
- Introducing minimal JetStream support
Since Panini switched from asyncio-nats-client to nats-py, it has become possible to support one of the most important features of NATS 2.0 - JetStream. Panini v0.7.0 does not implement an interface to JetStream at the framework level. Instead, it is suggested to use directly nats-py. Example JetStream publisher microservice:
from panini import app as panini_app
app = panini_app.App(
service_name="js_listen_push",
host="127.0.0.1",
port=4222,
enable_js=True
)
log = app.logger
NUM = 0
@app.task()
async def subscribe_to_js_stream_push():
async def cb(msg):
log.info(f"got JS message ! {msg.subject}:{msg.data}")
await app.nats.js_client.subscribe("test.*.stream", cb=cb, durable='consumer-1', stream="sample-stream-1")
if __name__ == "__main__":
app.start()
See more details in the documentation: https://panini.technology/JetStream.html
A full-fledged extension of the Panini interface for JetStream is expected in the next versions of Panini.