Я создаю SpannerSingleton, чтобы оставаться на связи в течение всей жизни приложения.Я заинтересован в долговечности соединения ... если есть проблема сеанса / соединения, как я могу воссоздать сеанс?
Одной из идей было создание нового соединения, увеличивая setMaxSessions до большего числа, если их больше 90% пула исчерпан.Как противоположность экспоненциального отката?Но где / как я могу это сделать?Я не смог найти в клиентской библиотеке ничего, что позволило бы мне отслеживать состояние пула или количество клиентов.
Я пошел с Билл-Пью-Синглтон Потому что это казалось хорошим выбором ...
Вот что у меня есть:
public class SpannerSingleton {
private static Spanner spanner;
private static SpannerOptions options;
private static SessionPoolOptions sessionPoolOps = SessionPoolOptions
.newBuilder()
.setMaxSessions(1000) // 1000 concurrent queries
.setMinSessions(100) // keep 100 alive
.setMaxIdleSessions(100) // how many to keep from being idle and closed
.build();
private SpannerSingleton() {
try {
options = SpannerOptions
.newBuilder()
.setSessionPoolOption(sessionPoolOps)
.build();
spanner = options.getService();
} catch (Exception e) {
e.printStackTrace();
}
}
private static class SingletonHelper{
private static final Spanner CONNECTION = new SpannerSingleton().spanner;
}
public static synchronized Spanner getSpanner() {
return SingletonHelper.CONNECTION;
}
}
Я использую шаблон Factory, чтобы сделать dbClient
public SpannerFactory {
private static Spanner spanner = SpannerSingleton.getSpanner();
private static DatabaseId dbId;
public static DatabaseClient getConnection(String instance) {
if (Util.isEmpty(instance)) return null;
if ("mickey".equalsIgnoreCase(instance)) {
dbId = DatabaseId.of(spanner.getOptions().getProjectId(), "instance1", "mickey");
}
if ("mouse".equalsIgnoreCase(instance)) {
dbId = DatabaseId.of(spanner.getOptions().getProjectId(), "instance1", "mouse");
}
return spanner.getDatabaseClient(dbId);
}
}
Я хотел бы добавить что-то, что проверит пул соединений, чтобы увидеть, насколько мы близки к истощению, и затем воссоздать себя ...может быть, из-за этого, но что может случиться, если соединение прервется?