{"id":27603533,"url":"https://github.com/taskiq-python/taskiq-faststream","last_synced_at":"2025-12-25T22:30:31.533Z","repository":{"id":206708230,"uuid":"717520960","full_name":"taskiq-python/taskiq-faststream","owner":"taskiq-python","description":"FastStream - Taskiq integration to provide you with a great scheduling feature","archived":false,"fork":false,"pushed_at":"2024-10-26T20:47:49.000Z","size":137,"stargazers_count":35,"open_issues_count":5,"forks_count":5,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2025-04-12T07:22:03.171Z","etag":null,"topics":["asyncio","faststream","kafka","nats","python","rabbitmq","taskiq","taskiq-broker"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/taskiq-python.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-11T18:04:21.000Z","updated_at":"2025-04-04T12:23:06.000Z","dependencies_parsed_at":"2023-11-11T19:24:04.970Z","dependency_job_id":"4658fb42-2b41-438e-8dc0-4ebf82c1bf56","html_url":"https://github.com/taskiq-python/taskiq-faststream","commit_stats":{"total_commits":63,"total_committers":6,"mean_commits":10.5,"dds":0.5238095238095238,"last_synced_commit":"f37079b1170106939b0af08f629246412eb4e457"},"previous_names":["taskiq-python/taskiq-faststream"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taskiq-python%2Ftaskiq-faststream","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taskiq-python%2Ftaskiq-faststream/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taskiq-python%2Ftaskiq-faststream/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taskiq-python%2Ftaskiq-faststream/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taskiq-python","download_url":"https://codeload.github.com/taskiq-python/taskiq-faststream/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249259141,"owners_count":21239421,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asyncio","faststream","kafka","nats","python","rabbitmq","taskiq","taskiq-broker"],"created_at":"2025-04-22T19:17:20.415Z","updated_at":"2025-12-25T22:30:31.515Z","avatar_url":"https://github.com/taskiq-python.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Taskiq - FastStream\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/taskiq-python/taskiq-faststream/actions/workflows/test.yml\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://github.com/taskiq-python/taskiq-faststream/actions/workflows/test.yml/badge.svg\" alt=\"Tests status\"/\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/taskiq-faststream/\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://img.shields.io/pypi/v/taskiq-faststream?label=pypi%20package\" alt=\"Package version\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://pepy.tech/project/taskiq-faststream\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://static.pepy.tech/personalized-badge/taskiq-faststream?period=month\u0026units=international_system\u0026left_color=grey\u0026right_color=blue\" alt=\"downloads\"/\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/taskiq-faststream\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://img.shields.io/pypi/pyversions/taskiq-faststream.svg\" alt=\"Supported Python versions\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/taskiq-python/taskiq-faststream/blob/master/LICENSE\" target=\"_blank\"\u003e\n        \u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/license/taskiq-python/taskiq-faststream?color=%23007ec6\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\nThe current package is just a wrapper for [**FastStream**](https://faststream.airt.ai/0.2/?utm_source=github\u0026utm_medium=acquisition\u0026utm_campaign=measure) objects to make them compatible with [**Taskiq**](https://taskiq-python.github.io/) library.\n\nThe main goal of it - provide **FastStream** with a great **Taskiq** tasks [scheduling](https://taskiq-python.github.io/guide/scheduling-tasks.html) feature.\n\n## Installation\n\nIf you already have **FastStream** project to interact with your Message Broker, you can add scheduling to it by installing just a **taskiq-faststream**\n\n```bash\npip install taskiq-faststream\n```\n\nIf you starting with a clear project, you can specify **taskiq-faststream** broker by the following distributions:\n\n```bash\npip install taskiq-faststream[rabbit]\n# or\npip install taskiq-faststream[kafka]\n# or\npip install taskiq-faststream[confluent]\n# or\npip install taskiq-faststream[nats]\n# or\npip install taskiq-faststream[redis]\n```\n\nFor **OpenTelemetry** distributed tracing support:\n\n```bash\npip install taskiq-faststream[otel]\n```\n\n## Usage\n\nThe package gives you two classes: `AppWrapper` and `BrokerWrapper`\n\nThese are just containers for the related **FastStream** objects to make them **taskiq**-compatible\n\nTo create scheduling tasks for your broker, just wrap it to `BrokerWrapper` and use it like a regular **taskiq** Broker.\n\n```python\n# regular FastStream code\nfrom faststream.nats import NatsBroker\n\nbroker = NatsBroker()\n\n@broker.subscriber(\"test-subject\")\nasync def handler(msg: str):\n    print(msg)\n\n# taskiq-faststream scheduling\nfrom taskiq.schedule_sources import LabelScheduleSource\nfrom taskiq_faststream import BrokerWrapper, StreamScheduler\n\n# wrap FastStream object\ntaskiq_broker = BrokerWrapper(broker)\n\n# create periodic task\ntaskiq_broker.task(\n    message=\"Hi!\",\n    # If you are using RabbitBroker, then you need to replace subject with queue.\n    # If you are using KafkaBroker, then you need to replace subject with topic.\n    subject=\"test-subject\",\n    schedule=[{\n        \"cron\": \"* * * * *\",\n    }],\n)\n\n# create scheduler object\nscheduler = StreamScheduler(\n    broker=taskiq_broker,\n    sources=[LabelScheduleSource(taskiq_broker)],\n)\n```\n\nTo run the scheduler, just use the following command\n\n```bash\ntaskiq scheduler module:scheduler\n```\n\nAlso, you can wrap your **FastStream** application the same way (allows to use lifespan events and AsyncAPI documentation):\n\n```python\n# regular FastStream code\nfrom faststream import FastStream\nfrom faststream.nats import NatsBroker\n\nbroker = NatsBroker()\napp = FastStream(broker)\n\n@broker.subscriber(\"test-subject\")\nasync def handler(msg: str):\n    print(msg)\n\n# wrap FastStream object\nfrom taskiq_faststream import AppWrapper\ntaskiq_broker = AppWrapper(app)\n\n# Code below omitted 👇\n```\n\nA little feature: instead of using a final `message` argument, you can set a message callback to collect information right before sending:\n\n```python\nasync def collect_information_to_send():\n    return \"Message to send\"\n\ntaskiq_broker.task(\n    message=collect_information_to_send,\n    ...,\n)\n```\n\nAlso, you can send a multiple message by one task call just using generator message callback with `yield`\n\n```python\nasync def collect_information_to_send():\n    \"\"\"Sends 10 messages per task call.\"\"\"\n    for i in range(10):\n        yield i\n\ntaskiq_broker.task(\n    message=collect_information_to_send,\n    ...,\n)\n```\n\n## OpenTelemetry Support\n\n**taskiq-faststream** supports taskiq's OpenTelemetry middleware. To enable it, pass `OpenTelemetryMiddleware` when creating the broker wrapper:\n\n```python\nfrom faststream.nats import NatsBroker\nfrom taskiq_faststream import BrokerWrapper\nfrom taskiq.middlewares.otel_middleware import OpenTelemetryMiddleware\n\nbroker = NatsBroker()\n\n# Enable OpenTelemetry middleware\ntaskiq_broker = BrokerWrapper(broker, middlewares=[OpenTelemetryMiddleware()])\n```\n\nThis will automatically add OpenTelemetry middleware to track task execution, providing insights into:\n- Task execution spans\n- Task dependencies and call chains\n- Performance metrics\n- Error tracking\n\nMake sure to configure your OpenTelemetry exporter (e.g., Jaeger, Zipkin) according to your monitoring setup.\n\nThe same applies to `AppWrapper`:\n\n```python\nfrom faststream import FastStream\nfrom taskiq_faststream import AppWrapper\nfrom taskiq.middlewares.otel_middleware import OpenTelemetryMiddleware\n\napp = FastStream(broker)\n\n# Enable OpenTelemetry middleware\ntaskiq_broker = AppWrapper(app, middlewares=[OpenTelemetryMiddleware()])\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaskiq-python%2Ftaskiq-faststream","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaskiq-python%2Ftaskiq-faststream","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaskiq-python%2Ftaskiq-faststream/lists"}