为了账号安全,请及时绑定邮箱和手机立即绑定

RabbitMQ Pika 消息体混乱

RabbitMQ Pika 消息体混乱

弑天下 2021-10-26 15:54:02
我正在尝试使用 Python 中的 RabbitMQ 创建一个简单的文件下载和上传服务。我制作了服务器和客户端脚本,并定义了一些对象,这些对象可以为请求在 json 中进行序列化和反序列化,因此我可以将文件 uid 或其他参数与二进制数据(使用 base64 编码)一起发送。发送小文件时一切正常,但是当我开始发送更大的文件(用 1.4mb 文本文件测试)时,我开始收到 JSONDecode 错误。我正在将发送和接收的消息转储到文件中,看起来发送的消息是格式正确的 json。但是,收到的消息似乎是乱七八糟的,例如:发送:{"uid":"test",Rhc2Rhc2Rhc2Rhc2Rhc2Rhc2=="}收到:Rhc2Rhc2{"uid":"test",Rhc2Rhc2Rhc2Rhc2=="}显然,混乱的块比这大得多。有没有人遇到过这个问题?下面是一些代码段,我可以上传完整的代码,但不是很整洁:上传请求:class FileSystemUploadRequest:def __init__(self, uid, data):    self.uid = uid    self.data = datadef encode(self):    dicc = {"uid": self.uid, "data": base64.b64encode(self.data).decode()}    return json.dumps(dicc)@staticmethoddef decode(jsonstr):    dicc = json.loads(jsonstr)    uid = dicc["uid"]    data = base64.b64decode(dicc["data"])    return FileSystemUploadRequest(uid, data)客户(发件人):def put_file_blocking(self, uid, data):    print(" [x] Llamaron a put_file_blocking")    corr_id = str(uuid.uuid4())    request = FileSystemUploadRequest(uid, data)    f = open("dump", "w")    f.write(request.encode())    f.close()    # Send upload request    self.channel.basic_publish(exchange='',                               routing_key=self.queue_upload,                               properties=pika.BasicProperties(                                   reply_to=self.callback_queue_name,                                   correlation_id=corr_id                               ),                               body=request.encode())服务器(接收器):def upload_request(ch, method, props, body):f = open("_dump", "w")f.write(body.decode())f.close()# Get Upload Requestrequest = FileSystemUploadRequest.decode(body)print(" [x] Received upload request for: " + request.uid)filename = fs_dir + "/" + request.uid
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

RabbitMQ 是一个消息代理,而不是一个文件存储系统。由于假设消息在大小上有所限制,因此进行了一些优化,这些优化将适用于您的用例。

要在分布式系统中共享文件,您应该依赖诸如OpenStack Swift或AWS S3之类的对象存储。

您仍然可以使用 RabbitMQ 来通知新文件的存在,但不是将其嵌入到消息中,而是提供对象存储中的位置,消费者从那里检索文件。


查看完整回答
反对 回复 2021-10-26
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信