@@ -31,6 +31,10 @@ def _NO_TM(m: "RmqMessage") -> Message:
31
31
)
32
32
33
33
34
+ async def _NEVER () -> bool :
35
+ return False
36
+
37
+
34
38
APP_RMQ_CONNECTION_TIMEOUT_SECONDS = float (
35
39
os .environ .get (
36
40
"APP_RMQ_CONNECTION_TIMEOUT_SECONDS" ,
@@ -124,6 +128,7 @@ async def publish_to_exchange(
124
128
confirmation_timeout : float = APP_RMQ_CONFIRMATION_TIMEOUT_SECONDS ,
125
129
connection_timeout : float = APP_RMQ_CONNECTION_TIMEOUT_SECONDS ,
126
130
channel : Optional [AbstractChannel ] = None ,
131
+ is_peer_deactivated : Callable [[], Awaitable [bool ]] = _NEVER ,
127
132
) -> None :
128
133
"""Publishes messages to a RabbitMQ exchange.
129
134
@@ -156,6 +161,7 @@ async def publish_messages(ch: AbstractChannel) -> None:
156
161
exchange_name = exchange_name ,
157
162
preprocess_message = preprocess_message ,
158
163
confirmation_timeout = confirmation_timeout ,
164
+ is_peer_deactivated = is_peer_deactivated ,
159
165
)
160
166
161
167
try :
@@ -299,6 +305,7 @@ async def _publish_to_exchange(
299
305
exchange_name : str ,
300
306
preprocess_message : Callable [[Message ], Awaitable [RmqMessage ]],
301
307
confirmation_timeout : float ,
308
+ is_peer_deactivated : Callable [[], Awaitable [bool ]],
302
309
) -> None :
303
310
exchange = await channel .get_exchange (exchange_name , ensure = False )
304
311
deliveries : deque [_Delivery ] = deque ()
@@ -343,6 +350,9 @@ async def deliver_message(message: Message) -> None:
343
350
344
351
async def publish_messages () -> None :
345
352
while message := await recv_queue .get ():
353
+ if await is_peer_deactivated ():
354
+ raise ServerError ("The peer has been deactivated." )
355
+
346
356
delivery = _Delivery (message .id )
347
357
mark_as_confirmed = partial (on_confirmation , delivery )
348
358
0 commit comments