测试Azure死信服务总线队列

3
我们有一个服务监听 Azure 服务总线队列。我们还有另一个服务监听该队列的死信队列。当我们的 Azure 应用程序部署后,我们还有一系列测试来运行它们。我们想扩展自动化测试,以便测试处理死信的部分,但不确定如何编写测试以确保消息到达死信队列,因为在正常情况下消息不会成为死信。
目前我们正在手动测试,但我觉得这不是长期的选择。
有什么想法吗?
2个回答

5

根据Service Bus 文档,如果将EnableDeadLetteringOnMessageExpiration设置为true,则消息过期后会被发送到死信队列。因此,您可以执行以下操作:

var desc = new QueueDescription(QueueName);
desc.EnableDeadLetteringOnMessageExpiration = true;
desc.DefaultMessageTimeToLive = TimeSpan.FromSeconds(1); // one second is the min value

您只需等待超过1秒钟,即可测试以确保消息进入死信队列。

编辑:您还可以通过执行 receivedMessage.DeadLetter() 将已接收的消息发送到死信队列。这将自动将其放置在死信队列中。


感谢@TheDude的建议,但队列已经作为系统部署的一部分创建,并且其时间设置符合我们的需求。如果处理消息的服务在过期之前(即1秒之前)就将其拾取,那该怎么办?这种方法可能有一定的价值,但似乎存在许多时间问题的可能性。 - Sam Holder
1
@SamHolder 我在我的答案中包含了另一种方法。 - TheDude

5
在Service Bus API中,Microsoft没有直接将消息发送到死信队列而不将消息放入主队列的能力。如果您尝试使用死信队列路径创建MessageSender,它将失败并引发异常。
您需要使用虚假实现来模拟主队列接收器,该实现会调用BrokeredMessage.DeadLetter()方法将消息转移到死信队列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接