.NET RabbitMQ 连接定位

最近生产上一组RabbitMQ连接数异常升高,需要排查原因,但这组MQ上的业务有很多,以集群方式部署,客户端通过VIP连接,中间还有一层F5,所以从管理界面上难以定位到具体是谁导致的,虽然后面通过扫描5672端口定位了罪魁祸首,但如果后续碰到类似情况,如何快速定位具体是哪块业务或者是哪台机器影响的呢?我们先看RabbitMQ的管理界面,在Connections页面中,虽然在Name中提供了【IP+Port】,但并非我们实际的客户端IP:

所以能否自定义Name呢,答案是肯定的,我们可以通过connectionFactory.CreateConnection(connName);设置clientProvidedName来设置连接名称,直接上代码:

Console.WriteLine("开始执行!");
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.AutomaticRecoveryEnabled = true;
connectionFactory.NetworkRecoveryInterval = TimeSpan.FromSeconds(2.0);
connectionFactory.UserName = "admin";
connectionFactory.Password = "123456";
connectionFactory.HostName = "10.10.10.10";
connectionFactory.Port = 5672;
connectionFactory.VirtualHost = "/";
string connName = "连接示例";
var conn = connectionFactory.CreateConnection(connName);
var channel = conn.CreateModel();

EventingBasicConsumer eventingBasicConsumer = new EventingBasicConsumer(channel);
eventingBasicConsumer.Received += (sender, args) =>
{

    string msg = Encoding.UTF8.GetString(args.Body.ToArray());
    Console.WriteLine(msg);
};
string consumerTag = "消费者示例";
channel.BasicConsume("Q_Test", true, consumerTag, eventingBasicConsumer);
Console.WriteLine("连接中...");
Console.ReadLine();

效果如下:

细心的同学可能会发现我们还设置了consumerTag,是的,消费者一样可以在BasicConsume时通过设置consumerTag来设置消费者名称,效果如下:

Redis连接定位

突然想到Redis也应该有类似问题,那肯定也有ClientName之类的了,在配置文件里加一个就行:

var connStr = "127.0.0.1:6379,password=123456,abortConnect=false,name=myname";
posted @ 2024-06-27 13:56  猫探长  阅读(1)  评论(0编辑  收藏  举报