2016-07-14 9 views
0

Ich versuche, die AutomaticRecoveryEnabled Eigenschaft der RabbitMQ ConnectionFactory zu testen. Ich verbinde mich mit einer RabbitMQ-Instanz auf einer lokalen VM und auf dem Client veröffentliche ich Nachrichten in einer Schleife. Das Problem ist, wenn ich die Verbindung absichtlich unterbricht, wartet der Client für immer und vergeht keine Zeit. Wie stelle ich den Timeout-Wert ein? RequestedConnectionTimeout scheint keine Wirkung zu haben.RabbitMQ .NET Client und Verbindungstimeouts

Ich bin mit dem RabbitMQ Client 3.5.4

Rudimentär veröffentlichen Schleife:

// Client is a wrapper around the RabbitMQ client 
for (var i = 0; i < 1000; ++i) 
{ 
    // Publish sequentially numbered messages 
    client.Publish("routingkey", GetContent(i))); 
    Thread.Sleep(100); 
} 

Die Publish-Methode in der Wrapper:

public bool Publish(string routingKey, byte[] body) 
{ 
    try 
    { 
     using (var channel = _connection.CreateModel()) 
     { 
      var basicProps = new BasicProperties 
      { 
       Persistent = true, 
      }; 

      channel.ExchangeDeclare(_exchange, _exchangeType); 
      channel.BasicPublish(_exchange, routingKey, basicProps, body); 

      return true; 
     } 
    } 
    catch (Exception e) 
    { 
     _logger.Log(e); 
    } 

    return false; 
} 

Die Anschluss- und Verbindungsfactory:

_connectionFactory = new ConnectionFactory 
{ 
    UserName = _userName, 
    Password = _password, 
    HostName = _hostName, 
    Port = _port, 
    Protocol = Protocols.DefaultProtocol, 
    VirtualHost = _virtualHost, 

    // Doesn't seem to have any effect on broken connections 
    RequestedConnectionTimeout = 2000, 

    // The behaviour appears to be the same with or without these included 
    // AutomaticRecoveryEnabled = true, 
    // NetworkRecoveryInterval = TimeSpan.FromSeconds(10), 
}; 

_connection = _connectionFactory.CreateConnection(); 

Antwort

0

Es scheint, dass dies ein Fehler in Version 3.5.4 ist. Version 3.6.3 wartet nicht unbegrenzt.