2013-04-24 112 views
1

我们有一个服务来侦听Azure服务总线队列。我们有另一个服务来监听这个队列的死信队列。我们还有一系列测试,在部署完Azure应用程序后运行。测试Azure死信服务总线队列

我们希望扩展我们的自动化测试,以便处理死信的部分也进行测试,但不确定我们如何编写测试来确保消息进入死信队列,正如在正常情况下情况消息不会死信。

目前我们正在测试这个手动,但我觉得这不是一个长期的选择。

有什么想法?

回答

5

根据服务总线docs,如果您将EnableDeadLetteringOnMessageExpiration设置为true,如果消息过期,它将转到死信队列。所以,你可以这样做:

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

你可以测试等待大于1秒,以确保消息进入死信队列。

编辑:你也可以通过做receivedMessage.DeadLetter()死信收到的消息。这会自动将其放入死信队列中。

+0

谢谢@TheDude,但队列已经作为系统部署的一部分而创建,并且其时序已设置为我们所需要的。如果处理消息的服务在它过期之前(即1秒过期之前)处理它会怎样?这种方法可能有一定的价值,但似乎充满了时间问题的可能性。 – 2013-04-24 22:22:52

+1

@SamHolder我在我的答案中包含了另一种方法。 – TheDude 2013-04-25 01:08:47

5

在服务总线API中,Microsoft不提供将邮件直接发送到死信队列而不将邮件发送到主队列的功能。如果您尝试使用路径为死信队列创建MessageSender,则它将失败并显示异常。

你需要用假实现来模拟你的主队列接收器,调用BrokeredMessage.DeadLetter()方法将消息转移到死信队列中。

相关问题