Microservices framework in Python.
Project description
Overview
Kontiki is a Python microservices framework built on AMQP (aio-pika) and asyncio.
- Write only your business logic: Kontiki manages connections to RabbitMQ, message routing (RPC, events, sessions, broadcast), service lifecycle and configuration merge for you.
- Design service interactions as messages: combine RPC, events, broadcast and per‑instance sessions to describe how services collaborate.
- Configuration‑driven: merged YAML config and a unified runner (
cli.run) to start services the same way in development and production. - Optional service registry: heartbeats, degraded state (
degraded_on), and basic observability (service status, events, exceptions). - Testability-first API: integration helpers (
kontiki.testing) are designed to make end-to-end scenarios easy to express with Behave (mock services, captured events/RPC/HTTP, synchronous test runner).
For a detailed overview of all features, see docs/features.md.
Quickstart
Install Kontiki (via pip or Poetry):
pip install kontiki
Define a simple service:
from kontiki.delegate import ServiceDelegate
from kontiki.messaging import Messenger, on_event, rpc
class MyDelegate(ServiceDelegate):
async def setup(self):
# init from self.container.config
pass
async def start(self):
# optional: start background tasks / open connections
pass
async def stop(self):
# optional: stop background tasks / close connections
pass
def do_something(self, x):
# business logic
return x * 2
async def handle_thing(self, payload):
# business logic
return {"processed": payload}
class MyService:
name = "compute-api" # optional: if omitted, the class name "MyService" is used
delegate = MyDelegate()
messenger = Messenger() # delegate: publish events, RPC to other services
@rpc
async def compute(self, x):
return self.delegate.do_something(x)
@on_event("thing_happened")
async def on_thing(self, payload):
result = await self.delegate.handle_thing(payload)
await self.messenger.publish("thing_processed", result)
def run():
cli.run(MyService, "Example Kontiki service.", version="0.1.0")
Expose it as a CLI command in pyproject.toml:
[tool.poetry.scripts]
my_service = "myapp.main:run"
Run your service:
my_service --config config.yaml
Kontiki relies on RabbitMQ. For local development and to run the examples, you can start a RabbitMQ instance via Docker with:
make run-amqp
Documentation
- Features:
docs/features.md - Configuration reference:
docs/configuration.md - Example configuration:
docs/kontiki-config.example.yaml - Contributing guidelines:
CONTRIBUTING.md - License:
LICENSE
Examples
Examples can be run via the Makefile (see targets such as run-rpc-service, run-rpc-example, run-simple-events-service, etc.).
| Feature | Example path |
|---|---|
| Basic RPC | examples/rpc/ |
| Simple events | examples/events/simple/ |
| Broadcast events | examples/events/broadcast/ |
| Event serialization | examples/events/serialization/ |
| Session-based events | examples/events/session/ |
| Periodic tasks | examples/task/ |
| Service registry (admin + client) | examples/registry/ |
| Heartbeats & degraded mode | examples/heartbeat/ |
| HTTP entrypoints | examples/http/simple/ |
You can also have a look at the following repository kontiki-scheduler. It's an example scheduler service built with Kontiki.
Monitoring (KontikiTUI)
When services register with the Kontiki registry, you can use KontikiTUI: a small terminal UI to browse registered services, inspect registry events and exceptions, and tail log files from the terminal.
Misc
Kontiki did not come out of a naming workshop but from the album Kontiki by the band Cotton Mather.
If you enjoy vintage 4-track indie pop as much as microservices, you should check it out.
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 kontiki-1.2.0.tar.gz.
File metadata
- Download URL: kontiki-1.2.0.tar.gz
- Upload date:
- Size: 36.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.2 CPython/3.13.7 Linux/6.8.0-124-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c781c8f107aef808a337cdcddb624ffa02a7ae49d347f7246f4940a69213de2e
|
|
| MD5 |
7df3cee73da0431539e4b2f77891ebdd
|
|
| BLAKE2b-256 |
53c4f45c825db8ffe93c8c5006df4dd67eea3f86a4e4885731d01e1f05f78ebc
|
File details
Details for the file kontiki-1.2.0-py3-none-any.whl.
File metadata
- Download URL: kontiki-1.2.0-py3-none-any.whl
- Upload date:
- Size: 53.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.2 CPython/3.13.7 Linux/6.8.0-124-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9514cf9f72af54abd7dffd13464a60cb46dab806e424210467c6c6f220dc9ddd
|
|
| MD5 |
0a07ecb5fb5bb3d4fd5bd501018c11d0
|
|
| BLAKE2b-256 |
196c18f4cfd74d17cfe84b3d316c6160a646819271f5ada22b32991c60851c3b
|