[英]Celery consumer does not receive messages from SQS queue on LocalStack
[英]Consume SQS messages from Celery
我的 Python 应用程序中有一个 Celery 实现。 我使用的经纪人是 SQS。 发送到 SQS 的消息来自不同的应用程序,通过 Boto3 的 send_message() api。 现在我的困惑是如何触发 Celery 选择来自 SQS 的消息进行处理。 将有一些任务将在 Celery 中运行,这些任务应该正确处理来自 SQS 的消息。 我的要求类似于Celery Consumer SQS Messages 。
根据我的理解,芹菜轮询 SQS 直到消息到达那里。 有人可以帮我解决这个问题吗?
我每 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)
如果我理解您,请尝试将工作程序作为守护程序运行。 使用诸如 supervisord 之类的工具来做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.