【发布时间】:2020-10-02 13:58:17
【问题描述】:
我正在尝试在 Azure ServiceBus 中实现“消息延迟”模式,但无法让基本示例正常工作。我正在使用Microsoft.Azure.ServiceBus v5.0.0 并遵循this SO question 和this Microsoft Documentation 的建议。
// Send a message
var sender = new MessageSender("my_sb_connection_string", "my_queue_name", RetryPolicy.Default);
await sender.SendAsync(new Message());
// Receive the message, defer it and then receive the deferred message
var receiver = new MessageReceiver("my_sb_connection_string", "my_queue_name",
ReceiveMode.PeekLock, RetryPolicy.Default);
var msg = await receiver.ReceiveAsync();
await receiver.DeferAsync(msg.SystemProperties.LockToken);
var deferredMsg = await receiver.ReceiveDeferredMessageAsync(msg.SystemProperties.SequenceNumber);
每次我打电话给ReceiveDeferredMessageAsync(),我都会得到一个异常:
Microsoft.Azure.ServiceBus.MessageNotFoundException: Messages not found. One or more sequence numbers missing.
我确定我做错了一些简单的事情,但我看不出它可能是什么。
【问题讨论】:
-
具有该特定序列号的消息是否在队列中?
-
@SeanFeldman 该消息在
DeferAsync()调用之后立即在死信队列中。这根本不是我所期望的。 -
@SeanFeldman 所以我为死信队列创建了第二个接收器,并尝试在那里接收延迟消息。不走运,我得到
Microsoft.Azure.ServiceBus.MessageNotFoundException: Failed to lock one or more specified messages as they were not deferred messages.所以消息不在主队列中,您无法从DLQ 接收它。至少,不是作为延迟消息。
标签: azure .net-core azure-servicebus-queues