【发布时间】: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 证实了这一点。它说明了超时:“指定等待消息到达目标队列的最长时间。仅在使用事务时适用。”