Evita riavvi lenti ripristinando transazioni XA preparate - Amazon MQ

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Evita riavvi lenti ripristinando transazioni XA preparate

ActiveMQ supporta transazioni distribuite (XA). Sapere in che modo ActiveMQ elabora le transazioni XA può evitare lenti tempi di ripristino per riavvii broker e failover del broker in Amazon MQ

Transazioni XA preparate non risolte vengono riprodotte a ogni riavvio. Se queste rimangono non risolte, il loro numero crescerà nel tempo, aumentando in modo significativo il tempo necessario per avviare il broker. Questo influisce sul tempo di riavvio e di failover. Occorre risolvere queste transazioni con un commit() o un rollback() per evitare il degrado delle prestazioni nel tempo.

Per monitorare le transazioni XA preparate non risolte, è possibile utilizzare il parametro JournalFilesForFastRecovery in Amazon CloudWatch Logs. Se questo numero aumenta o è costantemente maggiore di 1, è opportuno recuperare le transazioni non risolte con un codice simile a quello dell'esempio seguente. Per ulteriori informazioni, consulta Quotas in Amazon MQ.

Il codice di esempio seguente descrive in dettaglio le transazioni XA preparate e le chiude con un rollback().

import org.apache.activemq.ActiveMQXAConnectionFactory; import javax.jms.XAConnection; import javax.jms.XASession; import javax.transaction.xa.XAResource; import javax.transaction.xa.Xid; public class RecoverXaTransactions { private static final ActiveMQXAConnectionFactory ACTIVE_MQ_CONNECTION_FACTORY; final static String WIRE_LEVEL_ENDPOINT = "tcp://localhost:61616";; static { final String activeMqUsername = "MyUsername123"; final String activeMqPassword = "MyPassword456"; ACTIVE_MQ_CONNECTION_FACTORY = new ActiveMQXAConnectionFactory(activeMqUsername, activeMqPassword, WIRE_LEVEL_ENDPOINT); ACTIVE_MQ_CONNECTION_FACTORY.setUserName(activeMqUsername); ACTIVE_MQ_CONNECTION_FACTORY.setPassword(activeMqPassword); } public static void main(String[] args) { try { final XAConnection connection = ACTIVE_MQ_CONNECTION_FACTORY.createXAConnection(); XASession xaSession = connection.createXASession(); XAResource xaRes = xaSession.getXAResource(); for (Xid id : xaRes.recover(XAResource.TMENDRSCAN)) { xaRes.rollback(id); } connection.close(); } catch (Exception e) { } } }

In uno scenario reale, puoi controllare le transizioni XA preparate rispetto al sistema di gestione delle transazioni XA. Puoi quindi decidere se gestire ogni transazione preparata con un rollback() o un commit().