【问题标题】:Sending binary file through RabbitMQ通过 RabbitMQ 发送二进制文件
【发布时间】:2014-03-31 00:11:07
【问题描述】:

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

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

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

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

    【讨论】:

    • duable - 可行还是耐用?
    • @mbx,为什么不两个?
    • 对不起类型,在我的情况下是可行的。这里有一个额外的技巧。由于我们的服务器连接到我们的家庭网络,我们的外部 IP 每年可能会更改几次。因此,我们将 IP 地址放在我们营销网站上的文件中。因此,客户首先读取此文件,然后知道要连接的 IP 地址。此外,存储 IP 地址/密码的每个配置文件都应加密、倒置、倒置写入,包含 90% 的垃圾数据等以欺骗黑客。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这正是我的想法,听到他们来自其他人的声音让人放心。谢谢!
      • 二进制数据在序列化为 JSON 之前需要进行转义。见stackoverflow.com/q/1443158/1196816。将二进制数据作为 RabbitMQ 发布调用的主体传递可能会更好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      相关资源
      最近更新 更多