First choice of replica for given external dictionary should be based on randomness instead of order in configuration file.

return entry;
                    }
                }
                catch (const Poco::Exception & e)
                {
                    if (e.displayText().find("mysqlxx::Pool is full") != std::string::npos) 
                    {
                        full_pool = &pool;
                    }
                    app.logger().warning("Connection to " + pool->getDescription() + " failed: " + e.displayText());
                    continue;
                }
                app.logger().warning("Connection to " + pool->getDescription() + " failed.");
            }
        }
        app.logger().error("Connection to all replicas failed " + std::to_string(try_no + 1) + " times");
    }
    if (full_pool)
    {
        app.logger().error("All connections failed, trying to wait on a full pool " + (*full_pool)->getDescription());
        return (*full_pool)->get();
    }
    std::stringstream message;
    message << "Connections to all replicas failed: ";
    for (auto it = replicas_by_priority.begin(); it != replicas_by_priority.end(); ++it)
        for (auto jt = it->second.begin(); jt != it->second.end(); ++jt)
            message << (it == replicas_by_priority.begin() && jt == it->second.begin() ? "" : ", ") << (*jt)->getDescription();
    throw Poco::Exception(message.str());
}