Django 如何在SQS中解码芹菜信息

Django 如何在SQS中解码芹菜信息,django,encoding,celery,amazon-sqs,decoding,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 = base6

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:无效的开始字节

我错过什么了吗? 如何解码这些信息?有没有办法对其进行解码?

似乎“芹菜”使用“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)