@@ -267,6 +267,44 @@ async def verify_receive(consumer: Consumer):
267267 await verify_receive (consumer )
268268 await consumer .close ()
269269
270+ async def test_async_dead_letter_policy (self ):
271+ topic = f'asyncio-test-dlq-{ time .time ()} '
272+ dlq_topic = 'dlq-' + topic
273+ max_redeliver_count = 5
274+
275+ dlq_consumer = await self ._client .subscribe (dlq_topic , "my-sub" , consumer_type = pulsar .ConsumerType .Shared )
276+ consumer = await self ._client .subscribe (topic , "my-sub" , consumer_type = pulsar .ConsumerType .Shared ,
277+ dead_letter_policy = pulsar .ConsumerDeadLetterPolicy (max_redeliver_count , dlq_topic , 'init-sub' ))
278+ producer = await self ._client .create_producer (topic )
279+
280+ # Sen num msgs.
281+ num = 10
282+ for i in range (num ):
283+ await producer .send (b"hello-%d" % i )
284+ await producer .flush ()
285+
286+ # Redelivery all messages maxRedeliverCountNum time.
287+ for i in range (1 , num * max_redeliver_count + num + 1 ):
288+ msg = await consumer .receive ()
289+ if i % num == 0 :
290+ consumer .redeliver_unacknowledged_messages ()
291+ print (f"Start redeliver msgs '{ i } '" )
292+
293+ with self .assertRaises (asyncio .TimeoutError ):
294+ await asyncio .wait_for (consumer .receive (), 0.1 )
295+
296+ for i in range (num ):
297+ msg = await dlq_consumer .receive ()
298+ self .assertTrue (msg )
299+ self .assertEqual (msg .data (), b"hello-%d" % i )
300+ dlq_consumer .acknowledge (msg )
301+
302+ with self .assertRaises (asyncio .TimeoutError ):
303+ await asyncio .wait_for (dlq_consumer .receive (), 0.1 )
304+
305+ await consumer .close ()
306+ await dlq_consumer .close ()
307+
270308 async def test_unsubscribe (self ):
271309 topic = f'asyncio-test-unsubscribe-{ time .time ()} '
272310 sub = 'sub'
0 commit comments