如何通过C#中的RabbitMQ队列发送接收文件?

问题描述 投票:0回答:1

我需要使用RabbitMQ通过队列发送和接收文件。我没有直接发送文件的任何解决方案,因此我正在使用以下代码,并计划读取文件并将文件数据发送到接收器。但是我不认为这是个好方法。可能会有更好的方法。

var factory = new ConnectionFactory() { HostName = "localhost" };
        using(var connection = factory.CreateConnection())
        using(var channel = connection.CreateModel())
        {
            channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null);

            var body = File.ReadAllBytes("SomePath");

            channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);
            Console.WriteLine(" [x] Sent {0}", message);
        }

此代码也有一个限制,我不能直接在数据中传递文件名。因此,我想到了两种方法。

  1. 将文件名转换为字节数组,并附加文件数据字节数组。然后在客户端从字节数组中提取文件名。
  2. 进行两次呼叫,一个发送文件名,第二个发送文件数据,并在接收方使用文件名和文件数据创建相同的文件。

请让我知道是否有更好的发送和接收文件的方法。

c# rabbitmq
1个回答
0
投票

我想告诉你一些事情:

首先,发送和接收大邮件不是一个好方法。仅仅是因为它会对性能造成负面影响(尽管理论上message size limit in RabbitMQ在3.7.0以下为2GB)。

第二,如果您仍然想直接发送文件,RabbitMQ可以使用两种不同的技术来处理大型消息:

  1. 分组:大消息被发件人分块成较小的单元,并由接收方重新组合
  2. 正在缓冲:邮件被缓冲并发送成一体

==>欲了解更多详情,您可以阅读here

Finnaly,根据我的专业经验,我只是将字节内容存储在数据库中,然后发送存储在发送方中的ID,然后在接收方中,我只是通过ID从数据库中读取文件内容。

希望它能为您提供一些解决问题的建议和想法。

© www.soinside.com 2019 - 2024. All rights reserved.