在BizTalk MSMQ适配器中使用FullReceive确认类型

在BizTalk MSMQ适配器中使用FullReceive确认类型,biztalk,msmq,Biztalk,Msmq,我正在通过MSMQ适配器从BizTalk向MSMQ队列发送消息 我需要确认消息完全接收(由队列中的收件人)。无论我在MSMQ传输属性中发送何种确认类型,它都不适用于我 我知道完整的接收确认取决于消息的TTL(生存时间)。但这不能在MSMQ传输属性中设置。只有超时,但它仅适用于到达队列(以下是MSDN关于超时的说明:“指定等待消息到达目标队列的最长时间。仅在使用事务时适用。”)。我将此超时属性设置为10秒 如果将Ack Type设置为FullReceive,则仅当从队列中拾取消息时才会收到Ack。

我正在通过MSMQ适配器从BizTalk向MSMQ队列发送消息

我需要确认消息完全接收(由队列中的收件人)。无论我在MSMQ传输属性中发送何种确认类型,它都不适用于我

我知道完整的接收确认取决于消息的TTL(生存时间)。但这不能在MSMQ传输属性中设置。只有超时,但它仅适用于到达队列(以下是MSDN关于超时的说明:“指定等待消息到达目标队列的最长时间。仅在使用事务时适用。”)。我将此超时属性设置为10秒

如果将Ack Type设置为FullReceive,则仅当从队列中拾取消息时才会收到Ack。但我从来没有得到过nacks(显然是因为没有达到TTL)。我想默认的TTL是4小时。我还使用了其他Ack类型,如NegativeReceive等,但如果消息未从队列中选取,则没有任何消息会给我NACK

实际上,我可以通过WCF NetMSMQ适配器来实现它,在那里您可以发送TTL值,并且如果它过期,将获得NACKs


是否有人知道如何通过MSMQ适配器使FullReceive工作,并在10秒内未从队列接收到消息时接收NACK

您可以设置在上可用的任何属性,其中一些属性通过BizTalk管理中的适配器配置不可用。为此,您需要创建一个ccustom管道组件,然后在AddDocument()IAssemblerComponent实现中,您可以直接升级正确的属性:

// Promote msmq response queue property
private void PromoteProperty(MessageContextPropertyBase property, IBaseMessageContext context, object val)
{
    context.Promote(property.Name.Name, property.Name.Namespace, val);
}

this.PromoteProperty(new MSMQT.AnyProperty, message.Context, "Value"); 

Timout是与TTL等效的MSMQ适配器。超时单位设置是否正确?否,超时不作为TTL工作,它用于到达队列。我测试了很多次。MSDN证实了这一点。它说明了超时:“指定等待消息到达目标队列的最长时间。仅在使用事务时适用。”感谢您的回答,但它不会满足我的需要。首先,2013年BTS对MSMQT进行了一定程度的润滑。其次,这个适配器仍然没有任何属性来指定消息在目标队列中的超时时间。对此深表歉意。到2009年为止,我只使用过BTS。