代码之家  ›  专栏  ›  技术社区  ›  Stefan Zvonar

如何清除服务总线主题订阅的消息

  •  8
  • Stefan Zvonar  · 技术社区  · 8 年前

    只是想知道清除服务总线主题订阅中的消息的最佳方法(即使是通过门户、Powershell或C#)。

    假设我们有一个包含4个订阅的主题,我们只想清除其中一个订阅中的消息。

    我有一种感觉,唯一的方法可能是在一段时间内阅读信息,但希望有更好的东西。

    除了使用代码外,您还可以按照答案中的建议使用服务器资源管理器-右键单击订阅并清除消息:

    enter image description here

    2 回复  |  直到 8 年前
        1
  •  7
  •   Gaurav Mantri    8 年前

    你当然可以通过代码来实现。如果您正在使用 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);
        }
    

    这段代码将在中从订阅中获取消息(每次100条) Receive & Delete

    我相信 Service Bus Explorer 该工具还具有清除消息的功能。您也可以使用它来代替编写代码。

        2
  •  3
  •   Mikhail Shilkov    8 年前

    如果您有很多消息,并且可以忍受订阅者端的一些停机时间,那么删除订阅并创建一个同名的新订阅可能会更快。