微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#大数据队列

如何解决C#大数据队列

我们有一个 REST 服务器,它在与主应用程序服务器不同的机器上运行。现在我们想将数据从 REST 服务器转移到主应用程序服务器,我们还想从主服务器向 REST 服务器发送一些消息。为此我们对MQRabbit进行了评估,对于消息端口来说,它似乎非常合适。但是我们现在想知道 MQRabbit 是否可以处理其队列中大约 1~2 GB 的数据。

我关注了 RabbitMQ tutorials

现在我们有以下代码

public class QueueController<T> : Idisposable
{
    private IModel channel;
    private IConnection connection;
    private ConnectionFactory factory = new ConnectionFactory() { HostName = "localhost" };

    public string Topic { get; private set; }

    public string LastMessage { get; private set; }

    public QueueController() 
    {
        connection = factory.CreateConnection();
        channel = connection.CreateModel();
        
        Topic = nameof(T);
    }

    public void Publish(List<T> data)
    {
        var body = Encoding.UTF8.GetBytes(LastMessage = data.SerializeJson());

        var properties = channel.CreateBasicProperties();
        properties.Persistent = true;

        channel.Basicpublish(exchange: "",routingKey: $"{Topic}_queue",basicProperties: properties,body: body);
    }

    public void dispose()
    {
        channel.dispose();
        connection.dispose();
    }
}

Als MQRabbit 的教程展示了一个生产者和许多消费者,但我们的情况正好相反。许多生产者和一个消费者。对于这些情况,是否有一些最佳做法?

解决方法

让我们首先考虑消息队列的作用:发送消息——与另一个计算机系统通信的小数据。这里的操作词是小。消息通常包含以下三件事之一:1. 命令(去做某事)、2. 事件(发生某事)、3. 请求(给我一些数据)和 4. 响应(这是您的数据)。对这些的全面讨论超出了范围,但可以说,其中的每一个通常都可以由小于 100kB 的小消息组成。

确实,作为 RabbitMQ 基础的 AMQP 协议是一个相当健谈的协议。它要求大消息为 divided into multiple segments of no more than 131kB。这会给大文件传输增加大量开销,尤其是与其他文件传输机制(例如 FTP)相比时。其次,消息在队列中可用之前必须由代理完全处理,并且在完成此操作时它会占用代理上的宝贵资源。一方面,由于其架构,整个消息必须适合代理上的 RAM。此解决方案可能适用于一个客户端和一个代理,但在尝试扩展时会很快崩溃。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。