我们有一个监听 Azure 服务总线队列的服务。我们有另一个服务来监听这个队列的死信队列。我们还进行了一系列测试,这些测试在部署后针对我们的 Azure 应用程序运行。
我们想扩展我们的自动化测试,以便也测试处理死信的部分,但不确定我们如何编写测试来确保消息到达死信队列,因为在正常情况下消息不会死信。
目前我们正在手动测试这个,但我觉得这不是一个长期的选择。
有任何想法吗?
我们有一个监听 Azure 服务总线队列的服务。我们有另一个服务来监听这个队列的死信队列。我们还进行了一系列测试,这些测试在部署后针对我们的 Azure 应用程序运行。
我们想扩展我们的自动化测试,以便也测试处理死信的部分,但不确定我们如何编写测试来确保消息到达死信队列,因为在正常情况下消息不会死信。
目前我们正在手动测试这个,但我觉得这不是一个长期的选择。
有任何想法吗?
在服务总线 API 中,Microsoft 不提供直接将消息发送到死信队列而不将消息放入主队列的功能。如果您尝试使用死信队列的路径创建MessageSender ,它将失败并出现异常。
您需要使用调用BrokeredMessage.DeadLetter()方法将消息传输到死信队列的虚假实现来模拟您的主队列接收器。
根据服务总线文档,如果您设置EnableDeadLetteringOnMessageExpiration
为 true,则如果消息过期,它将进入死信队列。所以,你可以这样做:
var desc = new QueueDescription(QueueName);
desc.EnableDeadLetteringOnMessageExpiration = true;
desc.DefaultMessageTimeToLive = TimeSpan.FromSeconds(1); // one second is the min value
您只需等待 > 1 秒即可进行测试,以确保消息进入死信队列。
编辑:您也可以通过做死信收到的消息receivedMessage.DeadLetter()
。这将自动将其放入死信队列。