此bounty已结束。此问题的答案有资格获得+200声望奖励。赏金宽限期1小时后结束。PKCS12想要引起更多关注这个问题:需要帮助找到稳定、可靠的解决方案。可能是一个完整的重构
尝试读取队列。它在队列中有4条消息,每条消息都很小-就像“hello world”一样小!奇怪的是,有时它很慢,有时它很快,我不知道为什么。我猜这不是一个浏览队列的好方法,但对于我的目的,我不能以正常的方式使用队列-我需要按需获取队列的内容,然后处理它。谁能帮帮我?
public async Task<new List<string>()>> GetMessages()
{
var factory = new ConnectionFactory { HostName = "localhost"};
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
var queueDeclareResponse = channel.QueueDeclare("myQueue", durable: true, exclusive: false, autoDelete: false, arguments: null);
var receivedMessages = new List<string>();
var tcs = new TaskCompletionSource<List<string>>();
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var message = Encoding.UTF8.GetString(ea.Body.ToArray());
receivedMessages.Add(message);
if (receivedMessages.Count == queueDeclareResponse.MessageCount)
{
tcs.SetResult(receivedMessages);
}
};
channel.BasicConsume(queueName, autoAck: false, consumer: consumer);
// Wait for the consumer to finish processing messages
var result = await tcs.Task;
return result; // RETURN TO CALLER TO DO STUFF WITH LIST OF MSGS...
}
1条答案
按热度按时间ergxz8rk1#
我会这样做:
队列一般不会被设计成查看消息的“数据库”,RabbitMQ -就是其中一种情况,它不是设计来拉取消息的,而且basic.get效率不高(它不能让你批量获取消息),但对于UI/小队列应该没问题。
PS
从我在各种队列中的经验来看,RabbitMQ是其中最差的:
尽量使用Kafka:
这里的对比非常明显:https://www.projectpro.io/article/kafka-vs-rabbitmq/451