我们有一个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的教程展示了一个生产者和许多消费者,但我们的情况正好相反。多个生产者和一个消费者。对于这些情况,有没有一些最佳实践?
发布于 2021-06-01 14:34:48
让我们首先考虑消息队列的作用:发送消息--向另一个计算机系统传递信息的一小部分数据。这里的关键字很小。消息通常包含以下三种内容之一: 1.命令(去做点什么),2.事件(发生了什么),3.请求(给我一些数据),以及4.响应(这是你的数据)。关于这些的全面讨论超出了范围,但可以说,每一个通常都可以由小于100kB的小消息组成。
实际上,作为RabbitMQ基础的AMQP协议是一个相当健谈的协议。它要求大的消息是divided into multiple segments of no more than 131kB的。这会给大型文件传输增加大量开销,特别是与其他文件传输机制(例如FTP)相比时。其次,消息必须由代理完全处理,然后才能在队列中可用,在此过程中,它会占用代理上的宝贵资源。首先,由于其体系结构的原因,整个消息必须适合代理上的RAM。此解决方案可能适用于一个客户端和一个代理,但当尝试向外扩展时,它将很快崩溃。
https://stackoverflow.com/questions/66549723
复制相似问题