from faststream.rabbit import ExchangeType, RabbitBroker, RabbitExchange, RabbitQueue PAYMENTS_ROUTING_KEY = "payments.new" DEAD_ROUTING_KEY = "payments.dead" PAYMENTS_EXCHANGE = RabbitExchange( "payments", type=ExchangeType.DIRECT, durable=True, ) DEAD_EXCHANGE = RabbitExchange( "payments.dlx", type=ExchangeType.DIRECT, durable=True, ) PAYMENTS_QUEUE = RabbitQueue( "payments.new", durable=True, arguments={ "x-dead-letter-exchange": DEAD_EXCHANGE.name, "x-dead-letter-routing-key": DEAD_ROUTING_KEY, }, ) DEAD_QUEUE = RabbitQueue("payments.dead", durable=True) async def declare_topology(broker: RabbitBroker) -> None: payments_exchange = await broker.declare_exchange(PAYMENTS_EXCHANGE) dead_exchange = await broker.declare_exchange(DEAD_EXCHANGE) payments_queue = await broker.declare_queue(PAYMENTS_QUEUE) dead_queue = await broker.declare_queue(DEAD_QUEUE) await payments_queue.bind(payments_exchange, routing_key=PAYMENTS_ROUTING_KEY) await dead_queue.bind(dead_exchange, routing_key=DEAD_ROUTING_KEY)