Skip to main content

A middleware for the FastStream framework that provides deadline-propagation in Remote Procedure Call requests

Project description

faststream-deadline-propagation

A middleware for the FastStream framework that provides deadline-propagation in Remote Procedure Call requests. It ensures that messages are processed within a specified timeout period, raising an exception if the deadline is exceeded.

Features

  • Deadline Processing Middleware: Ensures that message processing is completed within a specified deadline.
  • Deadline Publishing Middleware: Adds a deadline header to messages being published, ensuring they are processed within the specified timeout.
  • Customizable Header: Allows customization of the header used for deadlines.
  • Exception Handling: Raises a DeadlineOccurred exception if the deadline is exceeded.

Example

import asyncio
from datetime import datetime, timedelta
from typing import Any

from faststream import FastStream
from faststream.nats import NatsBroker, NatsRouter

from faststream_deadline_propagation import (
    DeadlineCountdown,
    DeadlineProcessMiddleware,
    DeadlinePublishMiddleware,
)

rpc_router = NatsRouter(
    middlewares=(
        DeadlineProcessMiddleware.make_middleware(),
        # Your other middlewares here
    )
)
broker = NatsBroker(
    middlewares=(
        # Your other middlewares here
        DeadlinePublishMiddleware.make_middleware(),
    )
)


@rpc_router.subscriber("something")
async def do_nothing(message: Any, countdown: DeadlineCountdown):
    await asyncio.sleep(1)

    # current timeout in seconds
    current_timeout: float = countdown()
    print(current_timeout)


broker.include_routers(rpc_router)
app = FastStream(broker)


@app.after_startup
async def publisher():
    # You can specify a timeout and the DeadlinePublishMiddleware will automatically
    # add the header
    await broker.request(123, "something", timeout=3)

    # Or explicitly specify the header with your deadline, in this case, the header value
    # will not be overridden
    await broker.request(
        123,
        "something",
        timeout=3,
        headers={"x-deadline": (datetime.now() + timedelta(seconds=1)).isoformat()},
    )

To handle the DeadlineOccurred error and serialize the response, you should use the ExceptionMiddleware built into 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

Built Distribution

File details

Details for the file faststream_deadline_propagation-0.1.1.tar.gz.

File metadata

File hashes

Hashes for faststream_deadline_propagation-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a18a590f26dee7e47395e4ec0b022c2788b9f2162d3391c6416f144ab7b22809
MD5 5bd8b4de5193fc01cf916adef19a8227
BLAKE2b-256 b4347a737471257916c8feb9efb46d9209602a9eae97272f94467ff86ebcb45f

See more details on using hashes here.

File details

Details for the file faststream_deadline_propagation-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for faststream_deadline_propagation-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 34c6e4c50e597d8641eab44f153465260da6b8d5861f03d1d386c2ba3f994b7a
MD5 f45e35d04fecb0a4336b403d42edb3e6
BLAKE2b-256 5c0c85220902debc645c3f807f57defd517817128778c499ab1609bdb9b63001

See more details on using hashes here.

Supported by

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