我现在正在设计一个使用RabbitMQ作为消息队列的设计。消息将具有JSON主体,特别是对于一条消息,我想添加一个小的二进制文件。
我想知道的是,二进制文件的数据是否应该是JSON消息的一部分,还是可以单独附加到消息中?
答案 0 :(得分:14)
由于RabbitMQ消息有效负载只是一个二进制数组,因此您应该使用3个字段对消息体进行编码:
我不同意之前关于在json中嵌入文件的答案。 如果你对json中的文件数据进行编码,你会因为json转义+不必要的CPU占用而浪费空间,因为文件数据的json编码/解码+你需要两次读取文件数据(一次用于json反序列化,再一次用于复制它需要去的地方)
答案 1 :(得分:13)
该消息是单字节流,它还包含一个标题但不太相关。我建议你采取两种方法之一。您的JSON对象包含一个字段,该字段是二进制文件的字节流。或者,它提供可以下载文件的地址。如果二进制文件很小,那么前者应该可以正常工作。否则你可能更喜欢后者。
答案 2 :(得分:3)
我们使用RabbitMQ和文件传输。它的工作有点慢,但为了更新远方的客户,它是可行的。我建议您遵循以下准则:使用命令,偏移和CRC32,数据长度,每个数据块最大60kByte为每个块创建消息结构,为块提供计数器,在最后执行sha256以确保数据正确,使tar可选,这样数据可以更小,传输速度更快..制作一个目录,查看哪些文件需要更新...使用广播事件查看谁可用并一次更新1个客户与客户端。 company.update orso,客户收听 .company。玩得开心!附:我们还为此创建了一个linux服务,它在客户处自动启动。