Reschedule dead messages
Let's say for some reason you have messages in dead queue, which you want to reschedule (i.e. try again). You can do it as follows:
import asyncio
from repid import Repid, Queue, MessageCategory
app = Repid(my_connection) # (1)
async def main() -> None:
async with app.magic(auto_disconnect=True):
q = Queue(name="my_queue")
async for msg in q.get_messages(category=MessageCategory.DEAD): # (2)
await msg.reschedule()
if __name__ == "__main__":
asyncio.run(main())
- Connection setup is omitted
- Will run indefinetly, you can exit with Ctrl+C
Alternativly, you can use anext
and exit when you don't receive message for some time.
import asyncio
from repid import Repid, Queue, MessageCategory
EXIT_AFTER = 10 # seconds
app = Repid(my_connection) # (1)
async def main() -> None:
async with app.magic(auto_disconnect=True):
q = Queue(name="my_queue")
iterator = q.get_messages(category=MessageCategory.DEAD)
while True:
try:
msg = await asyncio.wait_for(anext(iterator), timeout=EXIT_AFTER) # (2)
except asyncio.TimeoutError:
break
if __name__ == "__main__":
asyncio.run(main())
- Connection setup is omitted
- Will raise an exception after specified amount of seconds, thus exiting the loop
import asyncio
from repid import Repid, Queue, MessageCategory
EXIT_AFTER = 10 # seconds
app = Repid(my_connection) # (1)
async def main() -> None:
async with app.magic(auto_disconnect=True):
q = Queue(name="my_queue")
iterator = q.get_messages(category=MessageCategory.DEAD)
while True:
try:
msg = await asyncio.wait_for(iterator.__anext__(), timeout=EXIT_AFTER) # (2)
except asyncio.TimeoutError:
break
if __name__ == "__main__":
asyncio.run(main())
- Connection setup is omitted
- Will raise an exception after specified amount of seconds, thus exiting the loop