我收到后,天蓝色服务总线会保留消息

时间:2014-12-18 10:19:29

标签: azure servicebus

我已经编写了一些代码来删除服务总线主题上的测试消息。我是唯一一个使用这个主题的人。它使用ReceiveAndDelete模式,所以我假设它会删除它们,但每次运行代码时它都会经历这个接收消息的循环,所以我知道它没有删除它们。我做错了什么?

   public void TruncateTopic()
    {
        // reset topic for testing..
        SubscriptionClient client = SubscriptionClient.CreateFromConnectionString(
            connStr, QUEUENAME, "AllMessages",ReceiveMode.ReceiveAndDelete);
        BrokeredMessage message = client.Peek();
        while (message != null)
        {
            client.Receive();
            message = client.Peek();
        }
        client.Close();

    }

1 个答案:

答案 0 :(得分:1)

在您的代码中,您只能在主题/队列中执行Peek。 Peek动作永远不会删除消息。

您可以清楚地read from documentation Peek methodpeeks进入订阅,而不会实际显示receiving消息。

ReceiveAndDelete接收模式在您不只是Peek消息而是Receive消息时才能正常工作!这就是为什么它被命名为ReceiveAndDelete而不是PeekAndDelete

将您的代码更改为:

    BrokeredMessage message = client.Receive();
    while (message != null)
    {
        message = client.Receive();
    }

一切都会好的。