55
66import boto3
77from asyncer import asyncify
8- from mypy_boto3_sqs .service_resource import Queue
8+ from mypy_boto3_sqs .service_resource import Queue , SQSServiceResource
99from taskiq import AsyncBroker
1010from taskiq .abc .result_backend import AsyncResultBackend
1111from taskiq .acks import AckableMessage
@@ -36,7 +36,7 @@ def __init__(
3636 raise BrokerError ("A valid SQS Queue URL is required" )
3737
3838 self .sqs_queue_url = sqs_queue_url
39- self ._sqs = boto3 .resource ("sqs" )
39+ self ._sqs : SQSServiceResource = boto3 .resource ("sqs" )
4040 self ._sqs_queue : Optional [Queue ] = None
4141
4242 if max_number_of_messages > 10 :
@@ -49,7 +49,9 @@ async def _get_queue(self) -> Queue:
4949 queue_name = self .sqs_queue_url .split ("/" )[- 1 ]
5050
5151 if not self ._sqs_queue :
52- self ._sqs_queue = await asyncify (self ._sqs .get_queue_by_name )(QueueName = queue_name )
52+ self ._sqs_queue = await asyncify (self ._sqs .get_queue_by_name )(
53+ QueueName = queue_name
54+ )
5355
5456 if not self ._sqs_queue :
5557 raise Exception ("SQS Queue not found" )
@@ -75,17 +77,22 @@ async def kick(
7577 # Must be explicitly set as a label to a unix timestamp
7678 expiry = message .labels .pop ("sqs_expiry" , 0 )
7779
78- await asyncify (queue .send_message )(
79- # SQS structured message attributes
80- MessageAttributes = {
81- "expiry" : {
82- "StringValue" : str (expiry ),
83- "DataType" : "Number" ,
84- }
85- },
86- MessageBody = message .message .decode ("utf-8" ),
87- MessageGroupId = message .task_name ,
88- )
80+ try :
81+ await asyncify (queue .send_message )(
82+ # SQS structured message attributes
83+ MessageAttributes = {
84+ "expiry" : {
85+ "StringValue" : str (expiry ),
86+ "DataType" : "Number" ,
87+ }
88+ },
89+ MessageBody = message .message .decode ("utf-8" ),
90+ MessageGroupId = message .task_name ,
91+ )
92+ except Exception as err :
93+ # taskiq supresses the original exception, but it wold be good to know about
94+ logger .exception ("Unhandled exception in SQSBroker" )
95+ raise err
8996
9097 async def listen (self ) -> AsyncGenerator [Union [bytes , AckableMessage ], None ]:
9198 """
0 commit comments