我在Azure中托管了两个云服务工作者角色,一个使用NServiceBus(Azure Service Bus传输)消耗消息,另一个生成消息。
昨天,我部署了一个新版本的生产者工作者角色,而队列中仍有大量的消息,因为我们正在处理从早上留下的一些高容量。当生产者启动时,它似乎已经清空(或者可能重新创建)队列,并且丢失了许多重要的生产消息。这似乎很奇怪,但是日志显示,在生产者角色大约开始的时候,消费者没有处理更多的消息,我们肯定知道有几百个等待。
启动消息生成器是否可能重新创建或清空目标队列?如果是这样,我如何配置NServiceBus永远不会这样做?
感谢。
答案 0 :(得分:1)
不,NServiceBus从不删除队列,甚至不删除源队列,随时可以在https://github.com/Particular/NServiceBus.AzureServiceBus/tree/master/src搜索代码库,您将看到只能删除主题订阅(当您取消订阅时)
但是,消费者可以选择在启动时清除队列,是否已按照这种方式进行配置(这是一个选择,而不是默认值)你可以划掉这个,清除不受支持azure servicebus transport
还有其他东西,比如诊断或管理工具,可能已经从队列中读取和删除了消息吗?
答案 1 :(得分:0)
经过数周的搜索,我终于得到了答案。他们没有删除,他们被移入死信队列。当时,我甚至不知道如何在那里看,它只是在我找到它们的Azure管理工作室。它与部署的制作人应用程序无关 - 这是一个红鲱鱼。
在搜索了为什么消息会在那里结束之后,我found this解释了问题和解决方案。调整队列上的LockDuration和MaxDeliveryCount设置后,问题似乎消失了。