【发布时间】:2014-03-31 00:11:07
【问题描述】:
我现在正在指定一个使用 RabbitMQ 作为消息队列的设计。该消息将有一个 JSON 正文,特别是对于一条消息,我想添加一个小的二进制文件。
我想知道的是,二进制文件的数据应该是JSON消息的一部分,还是可以单独附加到消息中?
【问题讨论】:
标签: rabbitmq
我现在正在指定一个使用 RabbitMQ 作为消息队列的设计。该消息将有一个 JSON 正文,特别是对于一条消息,我想添加一个小的二进制文件。
我想知道的是,二进制文件的数据应该是JSON消息的一部分,还是可以单独附加到消息中?
【问题讨论】:
标签: rabbitmq
我们使用 RabbitMQ 和文件传输。它的工作有点慢,但对于更新遥远的客户来说,它是可以承受的。我建议您遵循以下准则:为您发送的每个块创建一个消息结构,其中包含命令、偏移量和 CRC32、数据长度,每个数据块最大 60kByte,给块一个计数器,最后执行 sha256 以确保数据正确,使 tar 可选,因此数据可以更小,传输速度更快.. 制作目录,查看哪些文件需要更新...使用广播事件查看谁有空,并与客户端一次更新 1 个客户。 company.update orso,客户在其中收听 .company. 玩得开心! p.s.我们还为此创建了一个 linux-service,它在客户处自动启动。
【讨论】:
由于 RabbitMQ 消息负载只是一个二进制数组,您应该使用 3 个字段对消息正文进行编码:
我不同意之前关于在 json 中嵌入文件的答案。 如果你在 json 中编码文件数据,你会因为 json 转义而浪费空间 + 由于文件数据的 json 编码/解码导致不必要的 CPU 使用 + 你需要读取文件数据两次(一次用于 json 反序列化,一次用于复制它需要去的地方)
【讨论】:
消息是单字节流,它还包含一个标头,但相关性较低。我建议你采取两种方法之一。您的 JSON 对象包含一个字段,该字段是二进制文件的字节流。或者,它提供了可以下载文件的地址。如果二进制文件很小,那么前者应该可以正常工作。否则你可能更喜欢后者。
【讨论】: