【问题标题】:Error when creating ServiceBus Queue using Azure.Messaging.ServiceBus.Administration使用 Azure.Messaging.ServiceBus.Administration 创建 ServiceBus 队列时出错
【发布时间】:2021-05-09 00:34:34
【问题描述】:

我正在(尝试)使用此代码来创建 ServiceBus 队列:

using Azure.Messaging.ServiceBus;
using Azure.Messaging.ServiceBus.Administration;
...
class blabla
{
   private string connectionString = "Endpoint=sb://XXXX.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXYYY";
   private string queueName = "testqueue";
   ...
   public doit()
   {
    var adminClient = new ServiceBusAdministrationClient(connectionString);
    bool queueExists = adminClient.QueueExistsAsync(queueName).Result;
    if (!queueExists)
    {
        var options = new CreateQueueOptions(queueName)
        {
            DefaultMessageTimeToLive = TimeSpan.FromDays(2),
            LockDuration = TimeSpan.FromSeconds(45),
            MaxDeliveryCount = 8,
            MaxSizeInMegabytes = 2048
        };
        options.AuthorizationRules.Add(new SharedAccessAuthorizationRule(
            "allClaims",
            new[] { AccessRights.Manage, AccessRights.Send, AccessRights.Listen }));
        QueueProperties createdQueue = adminClient.CreateQueueAsync(options).Result;
    }

   }
}

但不断收到此错误:

System.AggregateException: One or more errors occurred. (SubCode=40900. Conflict. You're requesting an operation that isn't allowed in the resource's current state. To know more visit https://aka.ms/sbResourceMgrExceptions. . TrackingId:bc79fd98-73c8-4301-b6b9-05d0eae6ed6a_G17, SystemTracker:xxx.servicebus.windows.net:yyy, Timestamp:2021-05-09T00:24:57
Status: 409 (Conflict)
ErrorCode: 40900

将旧的 (NET) 方式与 Microsoft.ServiceBusNamespaceManager 一起使用没有问题。

  var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
  if (!namespaceManager.QueueExists(queueName))
  {
     namespaceManager.CreateQueue(queueName);
  }

那么,有谁知道我在这里做错了什么? *

【问题讨论】:

    标签: c# .net azure servicebus


    【解决方案1】:

    以下是更新后的工作代码,您需要确保您拥有具有完全访问权限的共享访问策略。

    using Azure.Messaging.ServiceBus.Administration;
    using System;
    using System.Threading.Tasks;
    
    namespace ServiceBusDemo
    {
        class Program
        {
            private static string connectionString = "Endpoint=sb://ns-servicebusshu.servicebus.windows.net/;SharedAccessKeyName=fullAccess;SharedAccessKey=oB+IsK8Aqp0/xfXnF9HCz6x9pqPIOysTXaJofSmHEYs=";
            private static string queueName = "testqueue";
    
            async static Task Main(string[] args)
            {
                await doit();
            }
           
            public static async Task doit()
            {
                var adminClient = new ServiceBusAdministrationClient(connectionString);
                bool queueExists = await adminClient.QueueExistsAsync(queueName);
    
                if (!queueExists)
                {
                    var options = new CreateQueueOptions(queueName)
                    {
                        DefaultMessageTimeToLive = TimeSpan.FromDays(2),
                        LockDuration = TimeSpan.FromSeconds(45),
                        MaxDeliveryCount = 8,
                        MaxSizeInMegabytes = 2048
                    };
                    options.AuthorizationRules.Add(new SharedAccessAuthorizationRule("allClaims", new[] { AccessRights.Manage, AccessRights.Send, AccessRights.Listen }));
    
                    QueueProperties createdQueue = await adminClient.CreateQueueAsync(options);
                }
    
            }
        }
    }
    

    一旦您运行应用程序,它就会成功创建队列,如下所示:

    【讨论】:

    • 感谢您的回答,这正是我的设置。结果是相同的错误:Azure.Messaging.ServiceBus.ServiceBusException: SubCode=40900。冲突。您请求的操作在资源的当前状态下是不允许的。要了解更多信息,请访问aka.ms/sbResourceMgrExceptions。 . TrackingId:7018f8f0-6624-4346-a1ea-60832e64a8a8_G4,SystemTracker:xxx.servicebus.windows.net:testq,时间戳:2021-05-09T14:38:03 状态:409(冲突)错误代码:40900
    • @Kajko 您是否同时尝试多个请求?您可以尝试使用上面的代码并尝试使用单个请求。它应该工作。我也试过了,效果很好
    • 我的代码(以及 Rahul)现在正在运行(????)。我必须创建一些具有完全访问权限的新共享访问策略 (????)。第三个创建的开始工作(??)。我创建的前 2 个仍然无法工作(????)。创建的 3 个策略之间没有区别。因此,我的答案中有问号。在 MS NET SB 论坛上发布了关于 3 个策略中的 1 个有效的问题。到目前为止没有答案/确认。
    【解决方案2】:

    很抱歉给您带来了困惑。 我的代码(以及 Rahul Shukla)现在正在运行(????)。 我必须创建一些具有完全访问权限的新共享访问策略 (????)。 第三个创建的开始工作(??)。 我创建的前 2 个仍然无法正常工作(????)。 创建的 3 个策略之间没有区别。因此,我的答案中有问号。 在 MS NET SB 论坛上发布了关于 3 个策略中的 1 个有效的问题。到目前为止没有答案/确认。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      相关资源
      最近更新 更多