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



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

我需要在完全收到消息时(由队列中的接收方)得到确认。无论我在MSMQ传输属性中发送什么确认类型,它都不适合我。

我知道完全接收应答取决于消息的TTL(生存时间)。但这不能在MSMQ传输属性中设置。只有Timeout,但它只适用于到达队列(以下是MSDN关于Timeout的说法:"指定等待消息到达目标队列的最大时间。仅在使用事务时适用。")。我将这个Timeout属性设置为10秒。

如果我将Ack类型设置为FullReceive,我只在从队列中挑选消息时获得Ack。但是我从来没有得到过零食(显然是因为我没有达到TTL)。我认为默认的TTL是4小时。我还使用了其他Ack类型,如NegativeReceive等,但如果消息未从队列中取出,则没有任何Ack给我。

我实际上可以通过WCF-NetMSMQ适配器来实现它,在那里你可以发送TTL值,并在它过期时获得NACKs。

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

您可以设置MSMQT适配器上可用的任何属性,其中一些属性在BizTalk管理中的适配器配置中不可用。要做到这一点,你需要创建一个自定义管道组件,然后在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"); 

最新更新