Код: Выделить всё
spring.r2dbc.pool.enabled=true
spring.r2dbc.pool.initial-size=0
spring.r2dbc.pool.max-size=20
spring.r2dbc.pool.max-acquire-time=30s
spring.r2dbc.pool.max-idle-time=1m
A. Создание данных для обработки – используется 1 поток.
- Этот процесс принимает сообщение от SQS и использует его для подготовки данных.
< /li>
МетодprocessMessage — это реактивный метод, который обрабатывает сообщение и генерирует данные в реактивном потоке. Использовал .block, поскольку я использовал режим подтверждения сеанса как CLIENT_ACKNOWLEDGEКод: Выделить всё
myConsumerService.processMessage(message).block();
- Один поток обрабатывает эти 3 операции одну за другой.
Каждая операция MySQL выполняется в течение двухзначных миллисекунд. - Используется следующий код для получения записей из для операций MySQL:
Код: Выделить всё
public class MyRepository { private final R2dbcEntityTemplate template; public MyRepository(R2dbcEntityTemplate template) { this.template = template; } public Mono getEntityById(Long id) { return template.select(MyEntity.class) .matching(Query.query(Criteria.where("id").is(id))).one(); } }
Код: Выделить всё
logging.level.io.r2dbc.pool=DEBUG
Ожидаемый результат: Предполагается, что приложение будет использовать максимум 11 подключений, поэтому выделенных соединений R2DBC должно быть 11.
Фактический результат: журналы показывают, что 20 подключений выделены пулом соединений R2DBC.
Вот журнал, который я наблюдал:
ConnectionPoolStats: выделено: 20, получено: 1, в режиме ожидания: 0, в ожидании: 9
Для справки я использовал следующий код для получения ConnectionPoolStats:< /p>
Код: Выделить всё
PoolMetrics metrics = connectionPool.getMetrics().orElse(null);
if (metrics != null) {
String connectionPoolStats = String.format("Allocated : %d, Acquired : %d, Idle : %d, Pending : %d",
metrics.allocatedSize(), metrics.acquiredSize(),
metrics.idleSize(), metrics.pendingAcquireSize());
logger.info("ConnectionPoolStats : {}", connectionPoolStats);
} else {
System.out.println("Connection Pool Metrics are not available.");
}
- Почему все соединения отображаются как выделенные, а приложение — нет требуется в любой момент времени?
- Есть ли вероятность того, что я приведу к какому-либо необычному состоянию соединения?
Подробнее здесь: https://stackoverflow.com/questions/793 ... y-the-appl