首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ServiceBus创建Azure.Messaging.ServiceBus.Administration队列时出错

使用ServiceBus创建Azure.Messaging.ServiceBus.Administration队列时出错
EN

Stack Overflow用户
提问于 2021-05-09 00:34:34
回答 3查看 807关注 0票数 1

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

代码语言:javascript
复制
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;
    }

   }
}

但是经常会出现这样的错误:

代码语言:javascript
复制
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

NamespaceManager中使用Microsoft.ServiceBus的旧(NET)方式是没有问题的。

代码语言:javascript
复制
  var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
  if (!namespaceManager.QueueExists(queueName))
  {
     namespaceManager.CreateQueue(queueName);
  }

那么,有人知道我在这里做了什么吗?*

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-10 19:41:00

很抱歉给你造成了混乱。我的代码(也是Rahul Shukla )现在正在工作(?)。我必须创建一些新的具有完全访问权限(?)的共享访问策略。第三个创建开始工作(??)。我创建的前两个仍然无法工作(?)。所创建的3种策略之间没有差别。因此,在我的回答中有问号。在MS论坛上发布了关于三分之一政策有效的问题。到目前为止还没有答复/确认。

票数 0
EN

Stack Overflow用户

发布于 2021-05-09 08:34:41

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

代码语言:javascript
复制
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);
            }

        }
    }
}

运行应用程序后,它成功地创建了队列,如下所示:

票数 1
EN

Stack Overflow用户

发布于 2022-08-18 11:13:15

也许这不是你的案子。但是,如果您的主题名称与您尝试创建新队列的名称相同,QueueExistsAsync将返回false,但是在创建时会出现这个奇怪的错误。修复很容易..。更改队列名称或删除违规主题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67453341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档