Arresto e disattivazione dei canali

È possibile arrestare e sospendere un canale prima della scadenza dell'intervallo di tempo di disconnessione.

I canali di messaggi sono progettati per essere connessioni di lunga durata tra gestori code con terminazione ordinata controllata solo dall'attributo dell'intervallo di disconnessione del canale. Questo meccanismo funziona correttamente a meno che l'operatore non debba terminare il canale prima che scada l'intervallo di tempo di disconnessione. Questa necessità può verificarsi nelle situazioni seguenti:
  • Disattivazione del sistema
  • Conservazione delle risorse
  • Azione unilaterale a un'estremità di un canale
In questo caso, è possibile arrestare il canale. È possibile eseguire questa operazione utilizzando:
  • comando STOP CHANNEL MQSC
  • comando Arresta canale PCF
  • IBM® MQ Explorer
  • [z/OS][IBM i]altri meccanismi specifici della piattaforma, come segue:
    [z/OS]Per z/OS®:
    Il pannello Interrompi un canale
    [IBM i]Per IBM i:
    Il comando CL ENDMQMCHL o l'opzione END sul pannello WRKMQMCHL
Ci sono tre opzioni per arrestare i canali utilizzando questi comandi:
QUIESCE
L'opzione QUIESCE tenta di terminare il batch corrente di messaggi prima di arrestare il canale.
Forza
L'opzione FORCE tenta di arrestare il canale immediatamente e potrebbe richiedere la risincronizzazione del canale quando viene riavviato poiché il canale potrebbe rimanere in dubbio.
[z/OS]Su IBM MQ for z/OS, FORCE interrompe qualsiasi riallocazione di messaggi in corso, che potrebbe lasciare i messaggi BIND_NOT_FIXED parzialmente riallocati o fuori ordine.
TERMINATE
L'opzione TERMINATE tenta di arrestare immediatamente il canale e termina il thread o il processo del canale.
[z/OS]Su IBM MQ for z/OS, TERMINATE interrompe qualsiasi riallocazione di messaggi in corso, che potrebbe lasciare i messaggi BIND_NOT_FIXED parzialmente riallocati o fuori ordine.

Tutte queste opzioni lasciano il canale nello stato ARRESTATO, richiedendo l'intervento dell'operatore per riavviarlo.

L'arresto del canale all'estremità di invio è effettivo ma richiede l'intervento dell'operatore per il riavvio. All'estremità di ricezione del canale, le cose sono molto più difficili perché l'MCA è in attesa di dati dal lato di invio e non c'è modo di avviare una terminazione ordinata del canale dal lato di ricezione; il comando di arresto è in sospeso fino a quando l'MCA non ritorna dall'attesa dei dati.

Di conseguenza ci sono tre modi consigliati di utilizzare i canali, a seconda delle caratteristiche operative richieste:
  • Se vuoi che i tuoi canali siano di lunga durata, tieni presente che ci può essere una terminazione ordinata solo dall'estremità di invio. Quando i canali vengono interrotti, ovvero arrestati, è richiesto l'intervento dell'operatore (un comando START CHANNEL) per riavviarli.
  • Se si desidera che i canali siano attivi solo quando vi sono messaggi da trasmettere, impostare l'intervallo di disconnessione su un valore abbastanza basso. L'impostazione predefinita è alta e quindi non è consigliata per i canali in cui è richiesto questo livello di controllo. Poiché è difficile interrompere il canale ricevente, l'opzione più economica è quella di disconnettere e riconnettere automaticamente il canale in base alle esigenze del workload. Per la maggior parte dei canali, l'impostazione appropriata dell'intervallo di disconnessione può essere stabilita in modo euristico.
  • È possibile utilizzare l'attributo heartbeat - interval per far sì che l'MCA di invio invii un flusso heartbeat all'MCA di ricezione durante i periodi in cui non ha messaggi da inviare. Questa azione rilascia l'MCA ricevente dal relativo stato di attesa e le fornisce l'opportunità di sospendere il canale senza attendere la scadenza dell'intervallo di disconnessione. Fornire all'intervallo di heartbeat un valore inferiore a quello dell'intervallo di disconnessione.
    Nota:
    1. Si consiglia di impostare l'intervallo di disconnessione su un valore basso o di utilizzare gli heartbeat per i canali del server. Questo valore basso consente il caso in cui il canale richiedente termina in modo anomalo (ad esempio, perché il canale è stato annullato) quando non ci sono messaggi che il canale server deve inviare. Se l'intervallo di disconnessione è impostato su un valore elevato e gli heartbeat non sono in uso, il server non rileva che il richiedente è terminato (operazione che eseguirà solo la volta successiva che tenterà di inviare un messaggio al richiedente). Mentre il server è ancora in esecuzione, mantiene la coda di trasmissione aperta per l'input esclusivo in modo da ottenere ulteriori messaggi che arrivano sulla coda. Se si tenta di riavviare il canale dal richiedente, la richiesta di avvio riceve un errore poiché il server ha ancora la coda di trasmissione aperta per l'input esclusivo. È necessario arrestare il canale del server e riavviare di nuovo il canale dal richiedente.