通过RabbitMQ发送二进制文件

riq*_*ang 14 rabbitmq

我现在正在设计一个使用RabbitMQ作为消息队列的设计.消息将具有JSON主体,特别是对于一条消息,我想添加一个小的二进制文件.

我想知道的是,二进制文件的数据是否应该是JSON消息的一部分,还是可以单独附加到消息中?

coh*_*dar 16

由于RabbitMQ消息有效负载只是一个二进制数组,因此您应该使用3个字段对消息体进行编码:

  1. 文件大小
  2. 文件的二进制数据
  3. JSON

我不同意先前关于在json中嵌入文件的答案.如果你对json中的文件数据进行编码,你会因为json转义+不必要的CPU占用而浪费空间,因为json编码/解码文件数据+你需要两次读取文件数据(一次用于json反序列化,再一次用于复制它需要去的地方)


rob*_*olf 15

消息是单字节流,它还包含一个标题但不太相关.我建议你采取两种方法之一.您的JSON对象包含一个字段,该字段是二进制文件的字节流.或者,它提供可以下载文件的地址.如果二进制文件很小,那么前者应该可以正常工作.否则你可能更喜欢后者.

  • 二进制数据需要先转义,然后才能序列化为 JSON。请参阅 http://stackoverflow.com/q/1443158/1196816。最好将二进制数据作为 RabbitMQ 发布调用的主体传递。 (2认同)

Bar*_*ort 5

我们使用 RabbitMQ 和文件传输。它的工作速度有点慢,但对于更新远方的客户来说是可行的。我建议您遵循以下准则:为您发送的每个块创建一个消息结构,包括命令、偏移量和 CRC32、数据长度、每个数据块最大 60kByte、给块一个计数器、最后执行 sha256 以确保数据正确, 将 tar 设为可选,以便数据可以更小,传输速度更快.. 制作目录,查看哪些文件需要更新...使用广播事件查看谁可用,并与客户端一次更新 1 个客户。 company.update orso,客户收听.company。玩得开心!ps 我们还为此创建了一个 linux 服务,它在客户处自动启动。

  • _duable_ - 可行还是耐用? (6认同)
  • 抱歉,这个类型对于我来说是可行的。这里还有一个额外的技巧。由于我们的服务器连接到我们的家庭网络,因此我们的外部 IP 每年可能会更改几次。因此,我们将 IP 地址放入我们营销网站的文件中。因此,客户首先读取此文件,然后知道要连接的 IP 地址。此外,每个存储 IP 地址/密码的配置文件都应该以加密、反向、颠倒的方式写入,包含 90% 的垃圾数据等,以欺骗黑客。 (2认同)