Code: Select all
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. Daten für die Verarbeitung generieren – Verwendet 1 Thread
- Dies verbraucht Nachrichten von SQS und verwendet sie zur Datenvorbereitung.
< /li>
processMessage-Methode ist eine reaktive Methode, die Nachrichten verarbeitet und Daten im reaktiven Fluss generiert. Habe .block verwendet, da ich den Sitzungsbestätigungsmodus als CLIENT_ACKNOWLEDGE verwendet habeCode: Select all
myConsumerService.processMessage(message).block();
- Ein einzelner Thread verarbeitet diese 3 Vorgänge nacheinander.
Jeder MySQL-Vorgang wird innerhalb von zweistelligen Millisekunden abgeschlossen. - Der folgende Code wurde verwendet, um Datensätze abzurufen für MySQL-Operationen:
Code: Select all
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(); } }
Code: Select all
logging.level.io.r2dbc.pool=DEBUG
Erwartetes Ergebnis: Die Anwendung soll maximal verwendet werden 11 Verbindungen, daher sollten es 11 von der R2DBC-Verbindung zugewiesene Verbindungen sein.
Tatsächliches Ergebnis: Protokolle zeigen, dass 20 Verbindungen vom R2DBC-Verbindungspool zugewiesen wurden.
Hier ist das Protokoll, das ich beobachtet habe:
ConnectionPoolStats: Zugewiesen: 20, Erworben: 1, Leerlauf: 0, Ausstehend: 9
Zu Referenzzwecken habe ich den folgenden Code verwendet, um ConnectionPoolStats abzurufen:< /p>
Code: Select all
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.");
}
- Warum alle Verbindungen als Zuordnung angezeigt werden, die Anwendung jedoch nicht zu irgendeinem Zeitpunkt erforderlich?
- Besteht eine Wahrscheinlichkeit, dass ich zu einem ungewöhnlichen Verbindungsstatus führe?