我正在尝试为 RabbitMQ 添加 HealthCheck。
首先。
这不是 RabbitMQ 的问题,这是连接到 RabbitMQ 的 HealthCheck 的问题
我已将其添加到我的配置服务中。
services
.AddHealthChecks()
.AddRabbitMQ(rabbitConnectionString:"amqps://guest:guest@localhost/vhost");
但它抛出异常。
失败:Microsoft.Extensions.Diagnostics.HealthChecks.DefaultHealthCheckService[103] 运行状况检查rabbitmq在4144.5115ms后完成,状态为Unhealthy,描述为“(null)” RabbitMQ.Client.Exceptions.BrokerUnreachableException:指定的端点均无法访问
显然我构建连接字符串的方式有问题,但我已经尝试了我能想到的一切。
也不是
"amqps://guest:guest@localhost/rabbit"
这是开发版本,因此默认值均已到位。
我想知道这是否与用户界面中的名称有关
但是我的代码实际上从队列中读取和写入使用本地主机,所以我不确定为什么本地主机不起作用。
回复很晚了,但我刚才也遇到了同样的问题。
我解决这个问题的方法是使用
IConnection
的重载而不是 string
连接字符串。
private static IConnection GetRabbitMqConnection(IServiceProvider _)
{
ConnectionFactory factory = new ConnectionFactory();
factory.UserName = "user";
factory.Password = "password";
factory.VirtualHost = "/vhost";
factory.HostName = "localhost";
factory.Port = AmqpTcpEndpoint.UseDefaultPort;
IConnection conn = factory.CreateConnection();
}
然后
services
.AddHealthChecks()
.AddRabbitMQ(GetRabbitMqConnection);
这给了我健康的反应。
默认 RabbitMQ 安装未配置 TLS。因此连接应使用
amqp
协议而不是 amqps
,即 URI 应以 amqp://
开头。
请参阅此处了解更多信息:
上面的解决方案没有编译通过,因此这个修改版本使其可以编译并运行。
它通过全新的 RabbitMQ 安装提供了健康状态(根本没有进行任何定制)
using RabbitMQ.Client;
private static IConnection GetRabbitMqConnection(IServiceProvider _)
{
ConnectionFactory factory = new ConnectionFactory
{
UserName = "guest",
Password = "guest",
HostName = "localhost",
Port = AmqpTcpEndpoint.UseDefaultPort
};
return factory.CreateConnection();
}
services.AddHealthChecks()
.AddRabbitMQ((IServiceProvider provider, RabbitMQHealthCheckOptions options) =>
{
options.Connection = GetRabbitMqConnection(provider);
})
可以直接使用连接字符串对RabbitMQ进行健康检查。
services.AddHealthChecks()
.AddRabbitMQ(new Uri("amqp://username:password@ip:port/vhost"))
只需将
username
、password
、ip
、port
、vhost
替换为您自己的具体配置即可。 vhost
部分,连接字符串仍然可以工作