我的Python应用程序中有一个Celery实现。我使用的经纪人是SQS。发送到SQS的消息是通过Boto3的send_message()API来自其他应用程序的。现在,我的困惑是如何触发Celery从SQS中提取消息进行处理。 Celery中将运行一些任务,该任务应正确处理来自SQS的消息。我的要求类似于Celery Consumer SQS Messages。
据我了解,Celery会轮询SQS,直到消息到达那里。有人可以帮我吗?
答案 0 :(得分:0)
我每20秒调用一次此任务:
@app.task(name='listen_to_sqs_telemetry')
def listen_to_sqs_telemetry():
logger.info('start listen_to_telemetry')
sqs = get_sqs_client()
queue_url = 'https://sqs.us-east-2.amazonaws.com/xxx'
logger.info('Using ' + queue_url)
keep_going = True
num = 0
while keep_going:
keep_going = False
try:
response = sqs.receive_message(
QueueUrl=queue_url,
AttributeNames=[
'SentTimestamp',
],
MaxNumberOfMessages=5,
MessageAttributeNames=[
'All'
],
WaitTimeSeconds=20
)
# logger.info(response)
if 'Messages' in response:
keep_going = True
for rec in response['Messages']:
# Process message
sqs.delete_message(
QueueUrl=queue_url,
ReceiptHandle=rec['ReceiptHandle']
)
num = num + 1
else:
pass
# logger.info(response)
except Exception as e:
logger.error(str(e))
logger.info('done with listen_to_sqs_telemetry')
return "Processed {} message(s)".format(num)
答案 1 :(得分:0)
如果我了解您,请尝试将工作程序作为守护程序运行。使用主管等工具进行操作。