Skip to main content

FastStream SQL broker

Project description

Downloads Package version Documentation

faststream-sqlbroker

A SQL-backed broker for FastStream. Documentation.

Transactional outbox

Implementing the transactional outbox pattern becomes as simple as the following.

Publish messages transactionally with your other database operations.

from sqlalchemy.ext.asyncio import create_async_engine

from faststream import FastStream
from faststream.kafka import KafkaBroker, KafkaPublishMessage

from faststream_sqlbroker import SqlBroker, SqlBrokerMessage

engine = create_async_engine("postgresql+asyncpg://user:pass@localhost/mydb")
broker_sqlbroker = SqlBroker(engine=engine)
broker_kafka = KafkaBroker("127.0.0.1:9092")
app = FastStream(broker_sqlbroker, on_startup=[broker_kafka.connect])
publisher_sqlbroker = broker_sqlbroker.publisher()


@app.after_startup # just an example
async def publish_examples():
    async with engine.begin() as connection:
        # ... your other database operations using `connection` ...
        await publisher_sqlbroker.publish(
            {"message": "Hello, SqlBroker!"},
            queue="sqlbroker_queue",
            headers={
                "x-test-header": "outbox",
                "x-kafka-key-source": "outbox-key",
            },
            connection=connection,
        )

And relay the messages from the database to another broker.

publisher_kafka = broker_kafka.publisher("kafka_topic")


@publisher_kafka
@broker_sqlbroker.subscriber(
    queues=["sqlbroker_queue"],
    max_fetch_interval=1,
    min_fetch_interval=0,
    fetch_batch_size=10,
    flush_interval=3,
)
async def handle_msg(
    msg_body: dict,
    msg: SqlBrokerMessage,
) -> KafkaPublishMessage:
    return KafkaPublishMessage(
        msg_body,
        headers={
            "x-test-header": msg.headers["x-test-header"],
        },
        key=msg.headers["x-kafka-key-source"].encode(),
    )

Origins

Originated as a PR to FastStream.

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

faststream_sqlbroker-0.1.0a7.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

faststream_sqlbroker-0.1.0a7-py3-none-any.whl (40.3 kB view details)

Uploaded Python 3

File details

Details for the file faststream_sqlbroker-0.1.0a7.tar.gz.

File metadata

  • Download URL: faststream_sqlbroker-0.1.0a7.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for faststream_sqlbroker-0.1.0a7.tar.gz
Algorithm Hash digest
SHA256 6f95132a73c1f51f32f1603130c11fecbf1c6dec4953d8740009afc36467bc31
MD5 d2e507c42c068e712f5ec50dc36fe26b
BLAKE2b-256 718b7e46ac388fc146365cd6b81c04ba576bb275a91bcb947ccb015634f4c46a

See more details on using hashes here.

Provenance

The following attestation bundles were made for faststream_sqlbroker-0.1.0a7.tar.gz:

Publisher: release_pypi.yaml on faststream-community/faststream-sqlbroker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file faststream_sqlbroker-0.1.0a7-py3-none-any.whl.

File metadata

File hashes

Hashes for faststream_sqlbroker-0.1.0a7-py3-none-any.whl
Algorithm Hash digest
SHA256 033ada96b46305a6805e185848074b345435ddba7d17f499681f6c5637f0a40f
MD5 1547639537656a23feed7df87de8e12d
BLAKE2b-256 ec514e5a380dc76fe9859efa8f7bfd0d34069a075d7f872843871370d3b0afbb

See more details on using hashes here.

Provenance

The following attestation bundles were made for faststream_sqlbroker-0.1.0a7-py3-none-any.whl:

Publisher: release_pypi.yaml on faststream-community/faststream-sqlbroker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page