2016-04-26 2 views
0

the Bunny Juwel Mit abonnieren:Was ist eine gute Möglichkeit, ein Abonnement für eine Rabbit MQ-Warteschlange zu stoppen, ohne den Server zu benachrichtigen?

session = Bunny.new 
session.start 
channel = session.create_channel 
queue = channel.queue(queue_id, { durable: true }) 

queue.subscribe do | delivery_info, metadata, payload | 
    puts payload 
end 

Wie kann ich abmelden wissen, ohne dass der Server?

Anwendungsfall: Wenn ein Benutzer das Netzwerk verlässt, wird der Server nicht benachrichtigt. Also muss ich einen Weg finden, dieses Problem zu lösen. Aber wenn das Skript beendet wird oder der Thread beendet wird, räumt es offenbar auf und benachrichtigt den Server.

+0

Ich verstehe Ihre Frage nicht, weil ein Server von toten Verbraucher oder unsubscribed Verbraucher bewusst sein müssen. Sie können sich die [Hearthbeat-Funktion] ansehen (https://www.rabbitmq.com/heartbeats.html) –

+0

Wir haben ein Problem mit verlorenen Nachrichten, wenn die Netzwerkverbindung abbricht und ich versuche zu simulieren. –

Antwort

0

Haben Sie versucht, Ihr Netzwerkkabel zu trennen oder Ihre WLAN-Karte zu deaktivieren?

Wenn das keine Option ist, würde ich vorschlagen, ein Werkzeug zu finden, das diesen Effekt für Sie simuliert. aber wirklich, ich denke, eine hart verdrahtete Verbindung zu haben und dann das physische Kabel herausziehen würde der beste Weg sein, die Situation auf Nachfrage zu reproduzieren.

+0

Ja, das Kabel abziehen ist eine effektive Methode. Es ist jedoch eine sehr schlechte Art zu testen und zu entwickeln. Also suche ich nach einer Möglichkeit, das via Code zu simulieren. Außerdem möchte ich, dass die Rabbit MQ-Instanz auf demselben Computer ausgeführt wird, sodass das Trennen in diesem Fall nicht funktioniert. –

1

Wenn Sie unter Linux laufen, könnte Ihr Test den Befehl iptables ausführen, um die Verbindung zu RabbitMQ zu blockieren. Zum Beispiel:

iptables -i lo -A INPUT -p tcp --dport 5672 -j DROP 

die DROP Regel zu entfernen, können Sie ausführen:

iptables -D INPUT -i lo -p tcp -m tcp --dport 5672 -j DROP 
+0

Ja, nachdem ich mit Wireshark gespielt hatte, hatte ich die gleiche Idee. Ich habe mich gefragt, welcher Unix-Befehl zu verwenden ist, da es anscheinend viele Möglichkeiten gibt, Ports zu verwalten. –

Verwandte Themen