77import aiormq
88from aio_pika import DeliveryMode , ExchangeType , Message , connect_robust
99from aio_pika .abc import AbstractChannel , AbstractQueue , AbstractRobustConnection
10- from aiostream import stream
1110from pamqp .common import FieldTable
1211from taskiq import AckableMessage , AsyncBroker , AsyncResultBackend , BrokerMessage
1312from typing_extensions import Self
2019)
2120from taskiq_aio_pika .exchange import Exchange
2221from taskiq_aio_pika .queue import Queue
22+ from taskiq_aio_pika .utils import merge_async_iterables
2323
2424_T = TypeVar ("_T" )
2525
@@ -69,25 +69,20 @@ def __init__(
6969 """
7070 Construct a new broker.
7171
72- :param url: url to rabbitmq. If None,
73- the default "amqp://guest:guest@localhost:5672" is used.
72+ :param url: url to rabbitmq. If None, the default "amqp://guest:guest@localhost:5672" is used.
7473 :param result_backend: custom result backend.
7574 :param task_id_generator: custom task_id generator.
7675 :param qos: number of messages that worker can prefetch.
7776 :param loop: specific even loop.
7877 :param exchange: parameters of exchange that used to send messages.
79- :param task_queues: parameters of queues
80- that will be used to get incoming messages.
78+ :param task_queues: parameters of queues that will be used to get incoming messages.
8179 :param dead_letter_queue: parameters of dead-letter queue.
8280 :param delay_queue: parameters of queue for simple delay implementation.
83- :param delayed_message_exchange_plugin: turn on or disable
84- delayed-message-exchange rabbitmq plugin.
85- :param delayed_message_exchange: parameters of exchange
86- that used to send messages with delay.
81+ :param delayed_message_exchange_plugin: turn on or disable delayed-message-exchange rabbitmq plugin.
82+ :param delayed_message_exchange: parameters of exchange that used to send messages with delay.
8783 :param label_for_routing: label name to use for routing key selection.
8884 :param label_for_priority: label name to use for message priority.
89- :param connection_kwargs: additional keyword arguments,
90- for connect_robust method of aio-pika.
85+ :param connection_kwargs: additional keyword arguments, for connect_robust method of aio-pika.
9186 """
9287 super ().__init__ (result_backend , task_id_generator )
9388
@@ -241,10 +236,8 @@ async def _declare_queues(
241236 """
242237 Declare all queues.
243238
244- It's useful since aio-pika have automatic
245- recover mechanism, which works only if
246- the queue, you're going to listen was
247- declared by aio-pika.
239+ It's useful since aio-pika have automatic recover mechanism, which works only if the queue, you're going to
240+ listen was declared by aio-pika.
248241
249242 :param channel: channel to used for declaration.
250243 :return: list of declared queues and their consumer arguments.
@@ -323,8 +316,7 @@ def with_queue(self, queue: Queue) -> Self:
323316 """
324317 Add new queue to the broker.
325318
326- This method should be called before startup,
327- otherwise the new queue won't be declared and bound to exchange.
319+ This method should be called before startup, otherwise the new queue won't be declared and bound to exchange.
328320
329321 :param queue: queue to add.
330322 :return: self.
@@ -346,12 +338,8 @@ async def kick(self, message: BrokerMessage) -> None:
346338 """
347339 Send message to the exchange.
348340
349- This function constructs rmq message
350- and sends it.
351-
352- The message has task_id and task_name and labels
353- in headers. And message's routing key is the same
354- as the task_name.
341+ This function constructs rmq message and sends it. The message has task_id and task_name and labels in headers.
342+ And message's routing key is the same as the task_name.
355343
356344 :raises NoStartupError: if startup wasn't called.
357345 :raises IncorrectRoutingKeyError: if routing key is incorrect.
@@ -420,8 +408,7 @@ async def listen(self) -> AsyncGenerator[AckableMessage, None]:
420408 """
421409 Listen to queue.
422410
423- This function listens to queue and
424- yields every new message.
411+ This function listens to queue and yields every new message.
425412
426413 :raises NoStartupError: if startup wasn't called.
427414 :yields: parsed broker message.
@@ -446,17 +433,14 @@ async def body(
446433 # Suppress errors during iterator cleanup if channel is being closed
447434 logger .info ("Queue iterator closed during shutdown" )
448435
449- combine = stream . merge (
436+ async for message in merge_async_iterables (
450437 * [
451438 body (queue , consumer_args )
452439 for queue , consumer_args in queue_with_consumer_args_list
453440 if not self ._delay_queue or queue .name != self ._delay_queue .name
454441 ],
455- )
456-
457- async with combine .stream () as streamer :
458- async for message in streamer :
459- yield message
442+ ):
443+ yield message
460444
461445 async def shutdown (self ) -> None :
462446 """Close all connections on shutdown."""
0 commit comments