Celery SQS使用者的填充不正确

时间:2018-02-15 17:59:15

标签: python-3.x celery boto3 amazon-sqs consumer

我正在尝试为SQS队列设置Celery使用者。

我正在使用带有Python3的Celery 4.1.0,我用这样的方式发送了一个带有boto3(1.5.28)库的消息:

response = queue.send_message(MessageBody='Hello World')

到目前为止一切都还可以。

然后我尝试以这种方式设置Celery消费者:

@app.task(base=celery.Task, name='test', bind=True)
def test(self, message):
    print(message)
    return True

但我得到了这个追溯:

  ...

  File ".../lib/python3.6/site-packages/kombu/transport/SQS.py", line 350, in _on_messages_ready
    msg_parsed = self._message_to_python(msg, qname, queue)
  File ".../lib/python3.6/site-packages/kombu/transport/SQS.py", line 215, in _message_to_python
    body = base64.b64decode(message['Body'].encode())
  File ".../lib/python3.6/base64.py", line 87, in b64decode
    return binascii.a2b_base64(s)
binascii.Error: Incorrect padding

我所做的事情有什么不对吗?我是否需要一些特定配置才能使用SQS队列?

提前感谢!

1 个答案:

答案 0 :(得分:3)

您的邮件需要是base64编码的JSON:

message = {"test":"test"}
message_string = json.dumps(message)
byte_message = base64.b64encode(message_string.encode('utf-8'))
base64_json_string = byte_message.decode()
response = queue.send_message(MessageBody=base64_json_string)