Skip to main content

outbox-streaming

Reliably send messages to message/task brokers, like Kafka or Celery

Roadmap

Done

  • ✅ Kafka + SQLAlchemy
  • ✅ Kafka + SQLAlchemy + asyncio

In progress

  • ⏹ Celery + SQLAlchemy
  • ⏹ Celery + SQLAlchemy + asyncio

Planned

  • 🆕 Kafka + Django ORM
  • 🆕 Celery + Django ORM
  • 🆕 Dramatiq + SQLAlchemy
  • 🆕 Dramatiq + SQLAlchemy + asyncio
  • 🆕 Dramatiq + Django
  • 🆕 RabbitMQ + SQLAlchemy
  • 🆕 RabbitMQ + SQLAlchemy + asyncio
  • 🆕 RabbitMQ + Djagno

Example FastAPI + Kafka + SQLAlchemy

from fastapi import FastAPI
from outbox_streaming.kafka.sqlalchemy import SQLAlchemyKafkaOutbox
from sqlalchemy import orm

from app import models, db
from app.config import config
from app.schemas import TodoCreate

app = FastAPI()

# create instance of SQLAlchemyKafkaOutbox
outbox = SQLAlchemyKafkaOutbox(
    engine=db.engine,
    kafka_servers=config.KAFKA_SERVERS,
)

# Run separate tread that monitor outbox table and publish messages to Kafka. It's not recommended for production,
# but it's handy for development
outbox.publisher.run_daemon()

Session = orm.sessionmaker(bind=db.engine)

# create outbox tables 
outbox.storage.create_tables(engine=db.engine)


@app.post('/todos')
def create_todo(create: TodoCreate) -> str:

    with Session() as session:

        # create new object
        todo = models.Todo(text=create.text)

        session.add(todo)

        # create kafka event in outbox table
        outbox.save(
            session=session,
            topic='todo_created',
            value=todo.to_dict(),
        )

        # commit changes in database
        session.commit()
        
    # publisher will pick up kafka message from outbox table and will send it kafka topic

    return "OK"

Metadata

Release files for outbox-streaming 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for outbox-streaming 0.1.0
File Size Uploaded
outbox-streaming-0.1.0.tar.gz 16.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for outbox-streaming 0.1.0
File Interpreter ABI Platform
outbox_streaming-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 35.2 kB

Release files / outbox-streaming-0.1.0.tar.gz

Download URL outbox-streaming-0.1.0.tar.gz
Size 16.1 kB
Tags Source
SHA-256 checksum
How to use checksums
d7ea981203f968f64c051c84251bd63ed0f6ac2a4f43fa6a7277f5ca1e7b8b22
BLAKE2b-256 checksum
How to use checksums
3e35e04c0bbe2473bb22fc0a7b6b620b4f1fee873f816e7aae5d474508981c10
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.14 CPython/3.10.1 Darwin/21.5.0

Release files / outbox_streaming-0.1.0-py3-none-any.whl

Download URL outbox_streaming-0.1.0-py3-none-any.whl
Size 19.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3f6ac749ac42dc20a82369a194e92cbd8f6dfe3f983045c0593af4b92d0b4a6b
BLAKE2b-256 checksum
How to use checksums
03764ba4f584fddf445c4a49b44f5173a1c8d84d535b57d3e5a2f69adcdf49d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.14 CPython/3.10.1 Darwin/21.5.0

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page