# Avoiding the Thundering Herd When a server goes down, there is a possible anti-pattern called the _Thundering Herd_ where all of the clients try to reconnect immediately, thus creating a denial of service attack. In order to prevent this, most NATS client libraries randomize the servers they attempt to connect to. This setting has no effect if only a single server is used, but in the case of a cluster, randomization, or shuffling, will ensure that no one server bears the brunt of the client reconnect attempts. However, if you want to disable the randomization process for connect and re-connect, so that servers are always checked in the same order, you can do that in most libraries with a connection option: {% tabs %} {% tab title="Go" %} ```go servers := []string{"nats://127.0.0.1:1222", "nats://127.0.0.1:1223", "nats://127.0.0.1:1224", } nc, err := nats.Connect(strings.Join(servers, ","), nats.DontRandomize()) if err != nil { log.Fatal(err) } defer nc.Close() // Do something with the connection ``` {% endtab %} {% tab title="Java" %} ```java Options options = new Options.Builder(). server("nats://demo.nats.io:4222"). noRandomize(). // Disable reconnect shuffle build(); Connection nc = Nats.connect(options); // Do something with the connection nc.close(); ``` {% endtab %} {% tab title="JavaScript" %} ```javascript let nc = NATS.connect({ noRandomize: true, servers: [ "nats://127.0.0.1:4443", "nats://demo.nats.io:4222" ] }); ``` {% endtab %} {% tab title="Python" %} ```python nc = NATS() await nc.connect( servers=[ "nats://demo.nats.io:1222", "nats://demo.nats.io:1223", "nats://demo.nats.io:1224" ], dont_randomize=True, ) # Do something with the connection await nc.close() ``` {% endtab %} {% tab title="Ruby" %} ```ruby require 'nats/client' NATS.start(servers: ["nats://127.0.0.1:1222", "nats://127.0.0.1:1223", "nats://127.0.0.1:1224"], dont_randomize_servers: true) do |nc| # Do something with the connection # Close the connection nc.close end ``` {% endtab %} {% tab title="TypeScript" %} ```typescript // will throw an exception if connection fails let nc = await connect({ noRandomize: true, servers: [ "nats://127.0.0.1:4443", "nats://demo.nats.io:4222" ] }); nc.close(); ``` {% endtab %} {% tab title="C" %} ```c natsConnection *conn = NULL; natsOptions *opts = NULL; natsStatus s = NATS_OK; const char *servers[] = {"nats://127.0.0.1:1222", "nats://127.0.0.1:1223", "nats://127.0.0.1:1224"}; s = natsOptions_Create(&opts); if (s == NATS_OK) s = natsOptions_SetServers(opts, servers, 3); if (s == NATS_OK) s = natsOptions_SetNoRandomize(opts, true); if (s == NATS_OK) s = natsConnection_Connect(&conn, opts); (...) // Destroy objects that were created natsConnection_Destroy(conn); natsOptions_Destroy(opts); ``` {% endtab %} {% endtabs %}