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; }
}
}
2条答案
按热度按时间cqoc49vn1#
公共交通只使用交通工具的功能(你没有提到)。队列大小和其他度量通常是各种管理API的一部分。例如,RMQ集群或示例可以在没有管理API(它是一个插件)的情况下部署,因此您无论如何都无法获得这些度量。
对于RMQ,您可以使用管理API或 Package 器(如EasyNetQ management API)来获取所需的指标。
yks3o0rb2#
我知道这是一个老问题,但这是我如何解决的情况下,有人仍然在寻找一个解决方案。
注意,我在docker中运行了rabbitmq:management