【问题标题】:RabbitMQ connection issuesRabbitMQ 连接问题
【发布时间】:2021-12-24 14:21:51
【问题描述】:

我正在尝试查找 RabbitMQ 断开连接并且无法重新连接的问题,因此我已将其简化为此代码块以尝试跟踪它,但仍然无法弄清楚。这是一个代码示例

for (int i = 0; i < 100; i++)
{
    try
    {
        currentConnection = factory.CreateConnection();
        Console.WriteLine("connected " + i);
        currentConnection.Close();
        Console.WriteLine("closed " + i);
        currentConnection.Dispose();

    }
    catch (Exception ex)
    {
        Console.WriteLine("fail " + ex.Message);
    }
}

看起来很简单,但这就是我所看到的,我尝试在两个不同的位置使用两台不同的服务器,使用和不使用 TLS,有和没有多个端点/节点,结果是总是一样的,有时它会连接,有时它不会:

connected 0
closed 0
fail None of the specified endpoints were reachable
fail None of the specified endpoints were reachable
connected 3
closed 3
fail None of the specified endpoints were reachable

服务器日志充满了“{handshake_timeout,frame_header}”错误,但我不确定这意味着什么或我可以做些什么不同的事情。

【问题讨论】:

    标签: c# rabbitmq


    【解决方案1】:

    我不知道您为什么要进行该测试,但在实际应用中您不必打开和关闭许多连接(实际上是一个)并使用通道 (IModel)。

    https://www.rabbitmq.com/channels.html.

    为什么会失败?不知道,可能是TCP端口饱和等待释放资源。

    如果应用程序失去连接(网络问题),您必须重新创建一个并可能重试。

    【讨论】:

    • 我只想拥有并使用一个连接,但是当它失败时,它随机不会重新连接,我可以使用此代码轻松重现。我不知道为什么即使是全新安装也会在多台服务器上发生。我希望它要么根本不连接,要么 100% 的时间都连接。
    • 也许您可以在重试之间添加延迟以避免饱和。
    • 只打开、关闭和重新打开一个连接会导致“饱和”?这听起来不太健壮。
    • 我不知道,但是当它失去连接时我会延迟重试,实际上消耗更少的客户端CPU。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多