Interfacce per un adapter di ricezione con supporto batch
Un adapter di ricezione invia sempre i messaggi in batch. Un batch è un'unità di operazioni di database che è possibile utilizzare per azioni diverse dall'invio. Un adapter di ricezione ad esempio può inviare un set di messaggi, sospendere un set diverso di messaggi ed eliminare un altro set di messaggi nello stesso batch. Il raggruppamento di queste operazioni distinte nello stesso batch consente di ottimizzare le prestazioni riducendo al minimo il numero di percorsi di andata e ritorno al database necessari ed è pertanto consigliato.
Per inviare batch di messaggi al server, gli adapter di ricezione di tipo Isolato e In-Process devono implementare le interfacce seguenti:
IBTTransport
IBTTransportControl (solo adattatori in-process)
IBTTransportConfig
IBaseComponent
IPersistPropertyBag
IBTBatchCallBack
Nella procedura seguente viene descritta la sequenza di azioni che un adapter di ricezione esegue per inviare messaggi al server.
Un adattatore di ricezione ottiene il batch dal proxy di trasporto chiamando il metodo GetBatch dell'interfaccia IBTTransportProxy . Nella chiamata a GetBatch l'adapter passa un puntatore all'implementazione dell'interfaccia IBTBatchCallback .
Un adapter aggiunge i messaggi uno alla volta nel batch chiamando il metodo SubmitMessage dell'interfaccia IBTTransportBatch . Se si tratta di un'operazione bidirezionale, ad esempio la messaggistica solicit-response, il metodo SubmitResponseMessage della stessa interfaccia viene chiamato per inviare il messaggio di risposta.
Quando tutti i messaggi sono stati aggiunti al batch, l'adapter chiama il metodo Done dell'interfaccia IBTTransportBatch per inviare il batch al proxy di trasporto. Poiché gli adapter di ricezione sono di natura asincrona, l'adapter può ottenere immediatamente un nuovo batch e iniziare a inviare altri messaggi dopo aver chiamato Done.
Dopo l'elaborazione del batch, il motore di messaggistica richiama il metodo di callback BatchComplete dell'adapter usando il proxy di trasporto per effettuare la chiamata effettiva. Una matrice di oggetti BTBatchOperationStatus contenente lo stato dell'invio viene passata all'adapter. Ciascun oggetto corrisponde a un tipo di operazione e contiene lo stato generale dell'operazione e lo stato di ogni messaggio per cui è stata eseguita l'operazione. Nella sequenza seguente vengono descritte le azioni che l'adapter deve eseguire per analizzare lo stato di elaborazione del batch:
Controllare il valore HRESULT dello stato complessivo del batch passato come parametro al metodo BatchComplete . Se si tratta di un errore, questo indica che almeno un'operazione nel batch non è riuscita. L'invio dell'intero batch come un'unica entità non è pertanto riuscito. L'adapter deve quindi tentare di individuare i messaggi in cui si è verificato l'errore e inviare nuovamente come batch solo i messaggi che non hanno causato alcun errore.
Se lo stato generale del batch non riporta errori, questo significa che tutti i messaggi consegnati al proxy di trasporto sono stati resi persistenti su disco. Non indica tuttavia che la pipeline ha elaborato correttamente tutti i messaggi. È possibile che i messaggi che non sono stati elaborati nella pipeline siano stati sospesi. Per i messaggi non elaborati nella pipeline, lo stato generale del batch restituito non riporta errori perché i dati sono stati scritti su disco.
Controllare lo stato per ogni tipo di operazione nel
operationStatus
parametro . Se lo stato è S_OK, l'invio per questa operazione è riuscito e non è necessario controllare ulteriormente lo stato. Se lo stato è impostato su BTS_S_EPM_MESSAGE_SUSPENDED alcuni messaggi sono stati sospesi. BTS_S_EPM_SECURITY_CHECK_FAILED indica che alcuni messaggi non sono riusciti a eseguire l'autenticazione in una porta di ricezione richiesta dall'autenticazione. Se viene restituito E_FAIL o un valore HRESULT con un valore minore di zero, l'invio del messaggio per questa operazione non è riuscito.Verificare lo stato dei singoli messaggi per il tipo di operazione. Per il tipo di operazione di invio, lo stato di ogni messaggio viene impostato su S_OK se l'invio è riuscito. BTS_S_EPM_MESSAGE_SUSPENDED viene restituito se il messaggio è stato sospeso. BTS_S_EPM_SECURITY_CHECK_FAILED viene restituito se l'autenticazione del messaggio non è riuscita su una porta di ricezione che richiede l'autenticazione. E_BTS_NO_SUBSCRIPTION viene restituito se non sono presenti sottoscrittori per il messaggio pubblicato. Se viene restituito E_FAIL o un valore HRESULT con un valore minore di zero, l'invio del messaggio non è riuscito.
A seconda dell'adattatore, è possibile sospendere i messaggi che restituiscono E_FAIL o qualsiasi HRESULT non riuscito.
Il metodo BatchComplete deve restituire S_OK o E_FAIL per indicare il risultato dell'esecuzione. Se il metodo BatchComplete restituisceE_FAIL o qualsiasi HRESULT negativo, il proxy di trasporto registra un errore.
Nella figura seguente vengono illustrate le interazioni degli oggetti coinvolte nella creazione di un adapter di ricezione con supporto batch.
Flusso di lavoro per un adapter di ricezione che invia un batch di messaggi
Vedere anche
Variabili di adapter
Sviluppo di un adapter di ricezione
Creazione di istanze e inizializzazione di un adapter di ricezione
Interfacce per un adapter di ricezione In-Process
Interfacce per un adapter di ricezione isolato
Interfacce per un adapter di ricezione con supporto batch di tipo transazionale
Interfacce per un adapter di ricezione richiesta-risposta sincrono