我已经编写了一些代码来删除服务总线主题上的测试消息。我是唯一一个使用这个主题的人。它使用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();
}
答案 0 :(得分:1)
在您的代码中,您只能在主题/队列中执行Peek
。 Peek动作永远不会删除消息。
您可以清楚地read from documentation Peek method仅peeks
进入订阅,而不会实际显示receiving
消息。
ReceiveAndDelete
接收模式在您不只是Peek消息而是Receive消息时才能正常工作!这就是为什么它被命名为ReceiveAndDelete
而不是PeekAndDelete
。
将您的代码更改为:
BrokeredMessage message = client.Receive();
while (message != null)
{
message = client.Receive();
}
一切都会好的。