如何查找RabbitMQ连接字符串

问题描述 投票:0回答:4

我正在尝试为 RabbitMQ 添加 HealthCheck。

首先。

  1. 正在运行
  2. 它有效,我可以将东西排队。

这不是 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"

这是开发版本,因此默认值均已到位。

我想知道这是否与用户界面中的名称有关

但是我的代码实际上从队列中读取和写入使用本地主机,所以我不确定为什么本地主机不起作用。

c# rabbitmq health-check
4个回答
1
投票

回复很晚了,但我刚才也遇到了同样的问题。

我解决这个问题的方法是使用

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);

这给了我健康的反应。


0
投票

默认 RabbitMQ 安装未配置 TLS。因此连接应使用

amqp
协议而不是
amqps
,即 URI 应以
amqp://
开头。

请参阅此处了解更多信息:


0
投票

上面的解决方案没有编译通过,因此这个修改版本使其可以编译并运行。
它通过全新的 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);
    })

0
投票

可以直接使用连接字符串对RabbitMQ进行健康检查。

services.AddHealthChecks()
    .AddRabbitMQ(new Uri("amqp://username:password@ip:port/vhost"))

只需将

username
password
ip
port
vhost
替换为您自己的具体配置即可。
注意:您可以尝试完全省略
vhost
部分,连接字符串仍然可以工作

© www.soinside.com 2019 - 2024. All rights reserved.