BizTalk 消息队列大型消息扩展
本机消息队列无法处理正文大于 4 mb 的消息 (MB) 。 但是,Microsoft BizTalk Server包含本机消息队列的加载项,允许处理大于 4 MB 的消息。 此加载项作为 Mqrtlarge.dll 文件交付,并公开 MQSendLargeMessage 和 MQReceiveLargeMessage 应用程序编程接口 (API) ,以及类似的 COM 模型。 这些函数分别作为标准消息队列 API 、MQSendMessage 和 MQReceiveMessage 实现。
若要进行大消息交换,消息队列计算机必须已安装了 Mqrtlarge.dll 文件,并且消息队列应用程序应该使用加载项 API。 否则,完整的消息将被碎片化。
在 SDK 中的位置
<安装路径>\SDK\ Mqrtlarge.dll
文件库存
下表显示了本实用程序使用的文件及其用途。
文件 | 说明 |
---|---|
Mqrtlarge.dll | 公开 MQSendLargeMessage 和 MQReceiveLargeMessage 的 Win32 动态链接库。 头文件位于 <Install Path>\SDK\Include 目录中。 注意:必须将BizTalk Server安装到 64 位版本的 Windows 上,才能访问 64 位版本的 Mqrtlarge.dll。 |
使用此实用程序
通过以下过程运行 Mqrtlarge.dll 文件。
使用 Mqrtlarge.dll 文件
-
注意
对于没有BizTalk Server的 MSMQ 解决方案,MQRTLarge.dll 可能仍然正常运行。 但是,这不是 Microsoft 支持的推荐配置,如果在BizTalk Server环境之外使用,可能会出现意外结果。
将文件 Mqrtlarge.dll 添加到未安装 BizTalk Server 的计算机中。 消息队列使用 Mqrtlarge.dll 向 BizTalk Server 发送消息,或从 BizTalk Server 接收消息。
若要访问 Mqrtlarge.dll 文件中的 API,可在适当应用程序中添加一个对 Mqrtlarge.dll 文件的引用,该应用程序是在其他计算机与 BizTalk 消息队列终结点之间发送或接收消息的应用程序。
备注
大消息被发送到标准消息队列(也叫作 MSMQ)。 在这类队列中只应使用大消息 API,尽管这不是强制性的。
你仍然可以使用 MQSendMessage 将消息发送到向其发送大型消息的队列。 同样,可以使用 MQReceiveMessage 从此类队列接收消息,但不建议这样做,因为这可能会影响 MQReceiveLargeMessage API 的性能。
出于恢复目的,建议使用 DEAD_LETTER 日记。
分段
通常情况下,大消息会分段为多个消息,每个消息都小于 4 MB。 只会将正文分段,了解这一点很重要。 其他属性随每个片断一起发送。
分段的数量由消息的大小和片断的大小确定。 片断大小可以由文件 Mqrtlarge.dll 或 BizTalk 消息队列的相应部分自动确定。 应用程序还可以显式指定片断大小。
请注意,大消息扩展要求通过添加固定大小的其他内部数据来扩展消息。
PROPID_M_EXTENSION
可以使用 PROPID_M_EXTENSION/PROPID_M_EXTENSION_LEN 属性对消息进行签名。 签名由 40 个字节 (B) 组成 。 下表显示了签名片断。
说明 | 大小 |
---|---|
全局唯一标识符 (GUID) 表示此消息是使用 MQSendLargeMessage 发送的 | 16 B |
消息的 GUID:对消息的所有部分通用的每个大型消息 ID 是唯一的 | 16 B |
大消息的总大小 | 4 B |
部件号 | 2 B |
消息部分数 | 2 B |
使用 PROPID_M_EXTENSION 的决定还有一个额外的影响。 Microsoft Host Integration Server MSMQ-MQSeries Bridge 使用此属性传递一个结构,该结构包含那些在 MQSeries 和消息队列消息之间不直接映射的属性。 将消息发送到 MQSeries,或从 MQSeries 发送消息的应用程序显式或隐式使用此结构。 当接收应用程序从队列接收到消息时,消息队列能够生成确认信息。 确认信息被发送到由发送应用程序指定的队列中。 对于大消息,仅为大消息的最后部分发送此确认信息。