BizTalk 消息队列大型消息扩展

本机消息队列无法处理正文大于 4 mb 的消息 (MB) 。 但是,Microsoft BizTalk Server包含本机消息队列的加载项,允许处理大于 4 MB 的消息。 此加载项作为 Mqrtlarge.dll 文件交付,并公开 MQSendLargeMessageMQReceiveLargeMessage 应用程序编程接口 (API) ,以及类似的 COM 模型。 这些函数分别作为标准消息队列 API 、MQSendMessageMQReceiveMessage 实现。

若要进行大消息交换,消息队列计算机必须已安装了 Mqrtlarge.dll 文件,并且消息队列应用程序应该使用加载项 API。 否则,完整的消息将被碎片化。

在 SDK 中的位置

<安装路径>\SDK\ Mqrtlarge.dll

文件库存

下表显示了本实用程序使用的文件及其用途。

文件 说明
Mqrtlarge.dll 公开 MQSendLargeMessageMQReceiveLargeMessage 的 Win32 动态链接库。

头文件位于 <Install Path>\SDK\Include 目录中。 注意:必须将BizTalk Server安装到 64 位版本的 Windows 上,才能访问 64 位版本的 Mqrtlarge.dll。

使用此实用程序

通过以下过程运行 Mqrtlarge.dll 文件。

使用 Mqrtlarge.dll 文件

  1. 注意

    对于没有BizTalk Server的 MSMQ 解决方案,MQRTLarge.dll 可能仍然正常运行。 但是,这不是 Microsoft 支持的推荐配置,如果在BizTalk Server环境之外使用,可能会出现意外结果。

    将文件 Mqrtlarge.dll 添加到未安装 BizTalk Server 的计算机中。 消息队列使用 Mqrtlarge.dll 向 BizTalk Server 发送消息,或从 BizTalk Server 接收消息。

  2. 若要访问 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 发送消息的应用程序显式或隐式使用此结构。 当接收应用程序从队列接收到消息时,消息队列能够生成确认信息。 确认信息被发送到由发送应用程序指定的队列中。 对于大消息,仅为大消息的最后部分发送此确认信息。

另请参阅

SDK 中的实用工具