一次发送一条消息的适配器可以同步或异步发送消息。 如果适配器在执行发送操作时不阻止传输代理线程而是使用单独的线程,则异步发送消息。 为了能够异步发送消息,适配器需要实现以下接口:
IBTTransport
IBaseComponent
IBTTransportControl
IPersistPropertyBag
IBTTransmitter
以下步骤说明了发送适配器应消息引擎的请求从服务器传输消息时执行的一系列操作:
消息引擎使用传输代理通过调用 IBTTransmitter 接口的 TransmitMessage 方法将传出消息传递到发送适配器。
适配器在存储要发送到某些内部队列的消息后立即从 TransmitMessage 返回,并返回
FalsebDeleteMessage。 这样可以通知消息引擎消息将在异步模式下传输。适配器使用自己的线程池发送消息。
发送操作完成后,适配器从 MessageBox 数据库删除原始消息。 它使用传输代理的 IBTTransportBatch.GetBatch 方法从消息传送引擎获取批,然后调用 DeleteMessage。
下图显示了创建异步发送适配器所涉及的对象交互。
异步发送消息的工作流
注意
我们建议适配器对当前正处理的消息进行计数。 适配器应阻止 Terminate 方法,直到消息计数达到零。 对于发送适配器,正处理的消息应被适当处理。 这意味着,已成功异步传送的任何消息应该从适配器的专用应用程序消息队列中删除,以防止消息被发送两次。 通常,消息引擎调用 Terminate 后,它不接受从适配器发布新消息的请求。 这种情况的一个例外是与要求-响应对相关的消息。
另请参阅
适配器变量
开发发送适配器
实例化和初始化发送适配器
同步发送适配器的接口
支持同步批处理的发送适配器的接口
支持异步批处理的发送适配器的接口
支持事务性异步批处理的发送适配器的接口
要求-响应发送适配器的接口