【问题标题】:Using FullReceive Acknowledgement Type in BizTalk MSMQ adapter在 BizTalk MSMQ 适配器中使用 FullReceive 确认类型
【发布时间】:2014-08-17 00:44:23
【问题描述】:

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

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

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

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

我实际上可以通过 WCF-NetMSMQ 适配器来实现它,您可以在其中发送 TTL 值,如果它过去了就会得到 NACK。

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

【问题讨论】:

  • Timout 是 TTL 的 MSMQ 适配器等效项。超时单位设置是否合适?
  • 不,超时不适用于 TTL,它适用于到达队列。我测试了很多次。 MSDN 证实了这一点。它说明了超时:“指定等待消息到达目标队列的最长时间。仅在使用事务时适用。”

标签: biztalk msmq


【解决方案1】:

您可以设置MSMQT Adapter 上可用的任何您喜欢的属性,其中一些属性无法通过 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"); 

【讨论】:

  • 感谢您的回答,但它不能满足我的需要。首先,MSMQT 在 BTS 2013 中有些贬低。其次,这个适配器仍然没有任何属性来指定消息在目标队列中的超时时间。
  • 对此表示歉意。到 2009 年我只使用过 BTS。
猜你喜欢
  • 1970-01-01
  • 2010-10-28
  • 2013-01-16
  • 2020-04-13
  • 1970-01-01
  • 2012-03-02
  • 2011-08-07
  • 2012-09-10
  • 2010-12-13
相关资源
最近更新 更多