c# - 我可以使用 RabbitMQ 将大文件分发到多台机器吗?

标签 c# rabbitmq easynetq

我在一家数字标牌公司工作,我们向网络上的各种机器发送大量动画/视频。我们过去使用 ftp 将文件从服务器应用程序(这是我们的内容管理系统)发送到播放内容的机器。

是否可以在我们发送大文件(有些视频可能有 GB 或更大)的环境中使用 RabbitMQ?大多数文件都非常小,但偶尔我们会发送大视频。

另外一些播放器机器将在稍后添加,这意味着队列必须是动态的(即添加播放器以便现在我们可以向其发送内容)。 RabbitMQ可以这样配置吗? (从我看到的演示中,您必须在服务器和客户端应用程序启动之前预先创建队列)。

我们还可以确保文件发送安全,以便发送应用程序在将内容发送到机器之前必须先登录(如 FTP 登录)吗?

最佳答案

为了添加文件的动态使用者您可以在 RabbitMQ 代理之上使用 EasyNetQ 和 publish/subscribe行为。

正如 Russ Cam 所提到的,在谷歌群组中,人们发送了大消息,但这可能会破坏 RabbitMQ 集群。

解决方案可以是 FTP(或任何其他文件传输协议(protocol))和 Messages 之间的混合:

  • 每次您的客户端想要传输文件时,它都会向总线发布一条消息,并引用该文件(例如 FTP url)
  • 此消息的消费者随后将通过 FTP 连接以下载文件

EasyNetQ 已经为您提供了一个默认的订阅机制,它有助于动态订阅(参见上面的链接)新消费者,而无需提前配置 RabbitMQ。

最后,您可以考虑将文件拆分为许多小的消息 block ,但随后您应该创建一个函数,该函数将在接收器上重新组装文件,否则最糟糕的是,如果您的消费者稍后启动,您可能会丢失一些消息。

关于c# - 我可以使用 RabbitMQ 将大文件分发到多台机器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21419405/

相关文章:

c# - 锁定内部字符串?

javascript - 从 url 中的两个相同单词中删除一个单词

c# - 我可以为 RabbitMQ 消费者设置明确的任务超时吗?

c# - 依赖于 RabbitMQ 的 Topshelf 服务不会在重启时启动

c# - ConfigurationManager.GetSection(sectionName) 在执行单元测试时返回 null

c# - 为什么我的兔子队列不会死?

docker - Golang Docker 容器未在 Docker-Compose 中重新启动

c# - 如何使用 EasyNetQ/RabbitMQ 进行错误处理

.net - EasyNetQ 模型关闭

c# - 结构上的 as 运算符?