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

时间:2014-06-26 08:31:52

标签: biztalk msmq

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

我需要确认消息的完整接收(来自队列中的收件人)。无论我在MSMQ传输属性中发送了什么类型的确认类型,它对我都无效。

我知道Full Receive ack取决于消息的TTL(生存时间)。但是这不能在MSMQ传输属性中设置。只有Timeout,但它只适用于到达队列(这是MSDN关于超时的说法:"指定等待消息到达目标队列的最长时间。仅在您使用事务时适用。&# 34)。我将此Timeout属性设置为10秒。

如果我将Ack Type设置为FullReceive,我只会在从队列中选择消息时获得确认。但我从来没有得到麻烦(显然是因为没有达到TTL)。我认为默认的TTL是4小时。我还使用了其他Ack类型,比如NegativeReceive等,但如果没有从队列中挑选消息,则没有任何东西给我NACK。

我实际上可以通过WCF-NetMSMQ适配器实现它,你可以发送TTL值,如果它已经过去就会得到NACK。

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

1 个答案:

答案 0 :(得分:1)

您可以设置MSMQT Adapter上可用的任何属性,其中一些属性不能通过BizTalk admin中的适配器配置获得。为此,您需要创建一个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");