Domanda

Tengo sempre aperta una connessione JMS, perché ho un MessageListener su di essa.

È un problema comune preoccuparsi di ridurre al minimo la manutenzione delle applicazioni con connessioni JMS di lunga durata?

Stavo pensando a qualcosa sulla falsariga di tentare di recuperare da alcuni possibili tipi comuni di errore noti, come un errore temporaneo di connettività.

È stato utile?

Soluzione

Non c'è nulla nelle specifiche JMS standard di cui sia a conoscenza che assicuri che i problemi di connettività non siano visibili all'applicazione. Forse ci sono alcuni venditori che lo fanno come estensione (come suggerisce James Strachan).

Se si desidera un client JMS affidabile che non dipende dalle estensioni del fornitore, è necessario gestire gli errori e riconnettersi. Vedi Ricollegamento dell'ascoltatore JMS a JBossMQ (che, nonostante il titolo, non è JBossMQ-specifica).

Altri suggerimenti

Un buon fornitore JMS si occuperà di interruzioni di rete come un socket abbandonato o un broker di messaggi che fallisce o viene riavviato. per esempio. ecco come abiliti la riconnessione automatica in Apache ActiveMQ .

Spesso è abbastanza doloroso ricreare tutte le risorse JMS (connessione, sessioni, produttori, consumatori) - è molto più facile per il fornitore JMS farlo per te.

Se è necessario utilizzare un provider che non supporta questa funzione, prendere in considerazione la possibilità di cambiare o utilizzare le classi di supporto Spring JMS che possono fare un po 'di questo per te.

Dovrai gestire due casi:

  1. Firewall tra l'utente e il server JMS. La maggior parte dei firewall taglia un "inattivo". connessione dopo un paio d'ore. In tal caso, inviare un messaggio ogni ora o giù di lì o, se possibile, abilitare TCP_KEEPALIVE. Questa è un'opzione TCP / IP che farà in modo che il socket sottostante invii un messaggio di prova dopo qualche tempo.
  2. L'altro server viene riavviato. Quando ciò accade, otterrai una "connessione persa" errore quando si tenta di inviare il messaggio successivo. In questo caso, basta aprire nuovamente la connessione e riprovare.

Suggerisco di installare un server JMS locale (chiunque lo farà), collegare l'app ad esso e arrestare il server. Questo ti darà il messaggio di errore previsto per il caso n. 2. Quindi scrivi un test unitario con MockRunner per assicurarti che la gestione degli errori sia corretta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top