如何在SQS中解码芹菜消息

时间:2018-07-25 09:40:39

标签: django encoding celery amazon-sqs decoding

一些sqs中的芹菜任务永远待定,我想在删除之前阅读这些消息(任务)。 在进入sqs控制台后,我可以看到我尝试对其进行解码的编码消息

value = base64.b64decode(value.encode('utf-8')).decode('utf-8')

这使我用键转储字典

['body', 'headers', 'content-type', 'properties', 'content-encoding']

在此字典中,主体看起来像已编码 我尝试用相同的方式对其进行解码

value = base64.b64decode(value.encode('utf-8')).decode('utf-8')

但给出错误提示 UnicodeDecodeError:“ utf8”编解码器无法解码位置1的字节0x87:无效的起始字节

我想念什么吗? 如何解码此消息?有什么办法可以解码吗?

1 个答案:

答案 0 :(得分:0)

似乎“ Celery”使用“ pickle.dump”将任务的有效负载转换为字节,然后编码为base64。进行相反的操作,我们会再次获得有效载荷。

import base64
import boto3
import pickle

queue_name = 'your-queue-name'
sqsr = boto3.resource('sqs')
queue = sqsr.get_queue_by_name(QueueName=queue_name)

for message in queue.receive_messages(MaxNumberOfMessages=10):
    print(f'{message.message_id} >>> {message.receipt_handle}'
          f' >>> {message.body} >>> {message.message_attributes}')
    body_dict = json.loads(base64.b64decode(message.body))
    celery_payload = pickle.loads(base64.b64decode(body_dict.get('body')))
    print(celery_payload)