Hi,
I have a question regarding nats in cluster mode and clients in queue mode.
I have the following setup: 3 servers in full mesh mode.
E.g. i start server1 with:
./gnatsd -DV -m 8222 -cluster nats://
0.0.0.0:6222 -routes nats://<ip-server2>:6222,nats://<ip-server3>:6222
and server2 with:
./gnatsd -DV -m 8222 -cluster nats://
0.0.0.0:6222 -routes nats://<ip-server1>:6222,nats://<ip-server3>:6222
and server3 with:
./gnatsd -DV -m 8222 -cluster nats://
0.0.0.0:6222 -routes nats://<ip-server1>:6222,nats://<ip-server2>:6222
Then I start three clients (ruby nats-pure) in queue mode.
Every client connects to another server.
Say
client1 --> Connected to nats://<ip-server3>:4222
client2 --> Connected to nats://<ip-server2>:4222
client3 --> Connected to nats://<ip-server1>:4222
Next I publish 30 messages with another client.
All servers are still up and running and I get the following messages
client1 --> 15
client2 --> 10
client3 --> 5
All is fine. 30 messages published 30 messages received.
Now I shut down server 3 and I publish again 30 messages.
client1 --> does not reconnect, it receives 0 messages
client2 --> get 10 messages
client3 --> get 10 messages
So 10 messages are missing. My assumption would be not to lose any message.
- Is it a problem of my test code? (it comes below)
- Is it a problem of the ruby client?
- Is queueing mode in cluster workmode a problem?
- Is streaming mode necessary for this?
>snip client-code
require 'rubygems'
require 'nats/io/client'
nats = NATS::IO::Client.new
nats.on_error do |e|
puts "Error: #{e}"
end
nats.on_reconnect do
puts "Reconnected to server at #{nats.connected_server}"
end
nats.on_disconnect do
puts "Disconnected!"
end
nats.on_close do
puts "Connection to NATS closed"
end
rcv_msgs = 0
cluster_opts = {
servers: ["nats://
192.168.0.123:4222",
"nats://
192.168.0.124:4222",
"nats://
192.168.0.125:4222"
],
dont_randomize_servers: false,
reconnect_time_wait: 0.5,
max_reconnect_attempts: 1
}
nats.connect(cluster_opts)
puts "Connected to #{nats.connected_server}"
nats.subscribe('donkey', :queue => 'donkey-queue') { |msg|
rcv_msgs += 1
puts "Received '#{msg}' #{rcv_msgs}"
}
while true
sleep 0.1
end
>snip
Thomas