只是想知道最好的方法(即使通过Portal,Powershell或C#)来清除服务总线主题订阅中的消息。
想象一下,我们有一个包含4个订阅的主题,我们只想清除其中一个订阅的消息。
我有一种感觉,唯一的方法是在while循环中阅读消息,但希望有更好的东西。
更新:
除了使用代码之外,您还可以按照答案中的建议使用服务器资源管理器 - 右键单击订阅并清除消息:
答案 0 :(得分:4)
你当然可以通过代码来做到这一点。如果您使用的是Service Bus SDK
,则可以执行以下操作:
static void PurgeMessagesFromSubscription()
{
var connectionString = "Endpoint=sb://account-name.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=access key";
var topic = "topic-name";
var subscription = "subscription-name";
int batchSize = 100;
var subscriptionClient = SubscriptionClient.CreateFromConnectionString(connectionString, topic, subscription, ReceiveMode.ReceiveAndDelete);
do
{
var messages = subscriptionClient.ReceiveBatch(batchSize);
if (messages.Count() == 0)
{
break;
}
}
while (true);
}
此代码将执行的操作是在Receive & Delete
模式下从订阅中获取消息(一次100个),以便一旦获取消息,就会自动从订阅中删除它们。
我相信Service Bus Explorer
工具还具有清除邮件的功能。您也可以使用它而不是编写代码。
答案 1 :(得分:2)
如果您有很多消息并且可以容忍订阅方的一些停机时间,那么放弃订阅并创建一个具有相同名称的新订阅可能会更快。