Interfaces de un adaptador de recepción compatible con lotes
Un adaptador de recepción siempre envía mensajes en un lote. Un lote es una unidad de operaciones de base de datos que se puede utilizar para realizar acciones que no sean envíos. Por ejemplo, un adaptador de recepción puede enviar un conjunto de mensajes, suspender un conjunto diferente de mensajes y eliminar otro conjunto de mensajes en el mismo lote. Agrupar estas operaciones individuales en el mismo lote optimiza el rendimiento, con lo que se minimiza el número de ciclos de ida y vuelta de bases de datos necesario y se recomienda encarecidamente.
Los adaptadores de recepción aislados y de tipo En curso necesitan implementar las siguientes interfaces para enviar lotes de mensajes al servidor:
IBTTransport
IBTTransportControl (solo adaptadores en proceso)
IBTTransportConfig
IBaseComponent
IPersistPropertyBag
IBTBatchCallBack
Los siguientes pasos describen la secuencia de acciones que realiza un adaptador de recepción para enviar mensajes al servidor.
Un adaptador de recepción obtiene el lote del proxy de transporte llamando al método GetBatch de la interfaz IBTTransportProxy . En su llamada a GetBatch , el adaptador pasa un puntero a su implementación de la interfaz IBTBatchCallback .
Un adaptador agrega los mensajes de uno en uno al lote llamando al método SubmitMessage de la interfaz IBTTransportBatch . Si se trata de una operación bidireccional como la mensajería de solicitud-respuesta, se llama al método SubmitResponseMessage de esta misma interfaz para enviar el mensaje de respuesta.
Cuando se han agregado todos los mensajes al lote, el adaptador llama al método Done de la interfaz IBTTransportBatch para enviar el lote al proxy de transporte. Dado que los adaptadores de recepción son asincrónicos por naturaleza, el adaptador puede obtener inmediatamente un nuevo lote y empezar a enviar otros mensajes después de llamar a Listo.
Una vez procesado el lote, el motor de mensajería invoca el método de devolución de llamada BatchComplete del adaptador mediante el proxy de transporte para realizar la llamada real. Matriz de objetos BTBatchOperationStatus que contienen el estado del envío se pasa al adaptador. Cada objeto corresponde a un tipo de operación y contiene el estado general de la operación, así como el estado para cada uno de los mensajes para los que se ha realizado la operación. Las siguiente secuencia describe las acciones que el adaptador necesita realizar para analizar el estado de proceso por lotes:
Compruebe el valor HRESULT de estado de lote general pasado como parámetro al método BatchComplete . Si se produce un error significa que al menos una de las operaciones del lote no se ha realizado correctamente. Por tanto, se ha producido un error en el envío del lote completo como una entidad. El adaptador debe intentar descubrir los mensajes infractores y reenviar por lotes solo los que al principio no produjeron error.
Si el estado de lote general se completó correctamente, significa que todos los mensajes que se entregaron al proxy de transporte se han guardado en el disco. Sin embargo, no quiere decir que la canalización haya procesado todos los mensajes correctamente. Es posible que los mensajes que han producido errores en la canalización se suspendan. En cuanto a los mensajes que producen errores en la canalización, el estado de lote general devuelto es correcto, debido a que los datos se han escrito en el disco.
Compruebe el estado de cada tipo de operación en el
operationStatus
parámetro . Si el estado es S_OK, el envío de esta operación se realizó correctamente y no es necesario comprobar el estado. Si el estado se establece en BTS_S_EPM_MESSAGE_SUSPENDED se suspendieron algunos de los mensajes. BTS_S_EPM_SECURITY_CHECK_FAILED indica que algunos mensajes no pudieron autenticarse en un puerto de recepción necesario para la autenticación. Si se devuelve E_FAIL o cualquier HRESULT con un valor menor que cero, se produjo un error en el envío del mensaje para esta operación.Compruebe el estado de los mensajes individuales para el tipo de operación. Para el tipo de operación de envío, el estado de cada mensaje se establece en S_OK si el envío se realizó correctamente. BTS_S_EPM_MESSAGE_SUSPENDED se devuelve si el mensaje se suspendió. BTS_S_EPM_SECURITY_CHECK_FAILED se devuelve si el mensaje produjo un error de autenticación en un puerto de recepción que requiere autenticación. E_BTS_NO_SUBSCRIPTION vuelve si no había suscriptores para el mensaje publicado. Si se devuelve E_FAIL , o cualquier HRESULT con un valor menor que cero, se produjo un error en el envío del mensaje.
En función del adaptador, es posible que desee suspender los mensajes que devuelven E_FAIL o cualquier HRESULT con errores.
El método BatchComplete debe devolver S_OK o E_FAIL para indicar el resultado de la ejecución. Si el método BatchComplete devuelve E_FAIL o cualquier HRESULT negativo, el proxy de transporte registra un error.
La ilustración siguiente muestra las interacciones de objetos implicadas en la creación de un adaptador de recepción compatible con lotes.
Flujo de trabajo de un adaptador de recepción que envía un lote de mensajes
Consulte también
Variables de adaptador
Desarrollo de un adaptador de recepción
Creación de instancias e inicialización de un adaptador de recepción
Interfaces para un adaptador de recepción de tipo En curso
Interfaces para un adaptador de recepción aislado
Interfaces para un adaptador de recepción transaccional compatible con lotes
Interfaces para un adaptador de recepción sincrónico de solicitud-respuesta