Ich benutze Zookeeper v3.3.3 + dfsg2-1ubuntu1, läuft auf Ubuntu vm. (Die virtuelle Maschine läuft mit einer NAT-Netzwerkverbindung)Konnte keine Verbindung zu ZooKeeper von C# Anwendung mit Apache .NET-Bibliothek
Auf meiner Entwicklung Maschine (Windows 7), wenn ich laufe: zkCli.cmd -server 10.10.135.19:2181
es schließt fein und ich kann create
s durchführen, get
s usw.
ich habe C# 4-Anwendung mit einer NuGet-Abhängigkeit von Org.Apache.ZooKeeper v1.0.0.0.
ich es in der folgenden Art und Weise bin mit:
class watcher : IWatcher
{
private readonly ManualResetEventSlim _connected = new ManualResetEventSlim(false);
private WatchedEvent _event;
public void WaitUntilConnected()
{
_connected.Wait();
if (_event == null) throw new ApplicationException("bad state");
if (_event.State != KeeperState.SyncConnected)
throw new ApplicationException("cannot connect");
}
public void Process(WatchedEvent @event)
{
_event = @event;
_connected.Set();
}
}
...
public void TestZooKeeper()
{
_countdownWatcher = new watcher();
_zk = new ZooKeeper(
Settings.Default.ZookeeperConnectionString, // 10.10.135.19:2181
new TimeSpan(Settings.Default.ZookeeperConnectionTimeout), // 10000
_countdownWatcher);
_countdownWatcher.WaitUntilConnected();
}
Das Problem ist, dass dies hängt nur. Auf den zookeeper Protokolle, sehe ich folgendes:
2012-04-05 08:12:21,376 - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:[email protected]] - Accepted socket connection from /10.0.2.2:51057
2012-04-05 08:12:21,379 - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:[email protected]] - Client attempting to establish new session at /10.0.2.2:51057
2012-04-05 08:12:21,383 - INFO [SyncThread:0:[email protected]] - Established session 0x1367c91bf580047 with negotiated timeout 4000 for client /10.0.2.2:51057
2012-04-05 08:12:22,500 - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:[email protected]] - Accepted socket connection from /10.0.2.2:51059
2012-04-05 08:12:22,502 - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:[email protected]] - Client attempting to establish new session at /10.0.2.2:51059
2012-04-05 08:12:22,505 - INFO [SyncThread:0:[email protected]] - Established session 0x1367c91bf580048 with negotiated timeout 4000 for client /10.0.2.2:51059
2012-04-05 08:12:26,000 - INFO [SessionTracker:[email protected]] - Expiring session 0x1367c91bf580047, timeout of 4000ms exceeded
2012-04-05 08:12:26,001 - INFO [ProcessThread:-1:[email protected]] - Processed session termination for sessionid: 0x1367c91bf580047
2012-04-05 08:12:26,004 - INFO [SyncThread:0:[email protected]] - Closed socket connection for client /10.0.2.2:51057 which had sessionid 0x1367c91bf580047
2012-04-05 08:12:28,001 - INFO [SessionTracker:[email protected]] - Expiring session 0x1367c91bf580048, timeout of 4000ms exceeded
2012-04-05 08:12:28,002 - INFO [ProcessThread:-1:[email protected]] - Processed session termination for sessionid: 0x1367c91bf580048
2012-04-05 08:12:28,004 - INFO [SyncThread:0:[email protected]] - Closed socket connection for client /10.0.2.2:51059 which had sessionid 0x1367c91bf580048
Und dies wird fortgesetzt, bis ich den Prozess manuell, dh die WaitUntilConnected()
Methode töten nie zurückgibt. (verifiziert mit Debugging)
Es sieht so aus, als ob die Clientverbindung den Server erreicht, aber der Watcher merkt das nie, nichts passiert weiter auf diesem Kanal und der Server tötet die Verbindung, nur um den Client erneut zu versuchen. Irgendwelche Ideen, was ich hier falsch mache?
ist Watcher.Process jemals aufgerufen? – miniBill
nein. Ich bin ein wenig durch den Quellcode gegangen. Intern erreicht der Verbindungsstatus niemals den Status CONNECTING, da er beim ersten Lesen der ersten Antwort auf dem Socket vom ZK-Server nichts findet. –
Sie könnten versuchen, ein Tool wie wireshark zu verwenden, um zu sehen, was sich zwischen den Verbindungen des Clients und Ihres Codes unterscheidet. – miniBill