MassTransit RabbitMQ获取队列大小

3df52oht  于 12个月前  发布在  RabbitMQ
关注(0)|答案(2)|浏览(112)

如果队列中的消息数量大于某个阈值,我希望生产者不发送新消息。为此,我需要找出队列中当前有多少消息。有没有一种方法可以使用MassTransit框架来做到这一点?

cqoc49vn

cqoc49vn1#

公共交通只使用交通工具的功能(你没有提到)。队列大小和其他度量通常是各种管理API的一部分。例如,RMQ集群或示例可以在没有管理API(它是一个插件)的情况下部署,因此您无论如何都无法获得这些度量。
对于RMQ,您可以使用管理API或 Package 器(如EasyNetQ management API)来获取所需的指标。

yks3o0rb

yks3o0rb2#

我知道这是一个老问题,但这是我如何解决的情况下,有人仍然在寻找一个解决方案。
注意,我在docker中运行了rabbitmq:management

public static class QueueInfo
{
    public async static Task<RabbitMqQueueInfo> GetQueueInfo(string queueName)
    {
        var httpClient = new HttpClient();
        var rabbitMqApiUrl = "http://localhost:15672/api";
        var rabbitMqVhost = "%2F";
        var rabbitMqApiUser = "guest";
        var rabbitMqApiPassword = "guest";
        var queueInfoUrl = $"{rabbitMqApiUrl}/queues/{rabbitMqVhost}/{queueName}";

        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
            "Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes($"{rabbitMqApiUser}:{rabbitMqApiPassword}")));

        var response = await httpClient.GetAsync(queueInfoUrl);

        if (!response.IsSuccessStatusCode)
        {
            throw new Exception($"Failed to retrieve queue information for queue '{queueName}'.");
        }

        var responseContent = await response.Content.ReadAsStringAsync();
        var queueInfo = JsonSerializer.Deserialize<RabbitMqQueueInfo>(responseContent);

        if (queueInfo == null)
        {
            throw new Exception($"Failed to deserialize queue information for queue '{queueName}'.");
        }

        return queueInfo;
    }

    public class RabbitMqQueueInfo
    {
        public int messages { get; set; }
        public QueueStatus backing_queue_status { get; set; }
    }

    public class QueueStatus
    {
        public double avg_ack_egress_rate { get; set; }
        public double avg_ack_ingress_rate { get; set; }
        public double avg_egress_rate { get; set; }
        public double avg_ingress_rate { get; set; }
    }
}

相关问题