簡體   English   中英

ServiceBus Node.Js SDK 在創建隊列時拋出錯誤

[英]ServiceBus Node.Js SDK throwing error upon queue creation

出於顯而易見的原因,部分連接字符串/域名被星號混淆。

我正在使用 npm 中的"azure-sb": "^0.11.0" 下面是我嘗試創建隊列的代碼片段。

/* Connection string taken from Azure Portal shared access policies */
let serviceBusService = azure.createServiceBusService(SERVICEBUS_CONNECTION_STRING);

serviceBusService.createQueueIfNotExists(SERVICE_BUS_QUEUE_NAME, function(error){
    if(!error){
        console.log(`Looks like we'll be up and running.`);
    }
    /* This statement gets executed. */
    else {
        console.error(`Something went wrong when trying to boot up: ${error}`);
    }
});

嘗試啟動時出現問題:錯誤:401 - InvalidAudience:授權標頭包含具有錯誤受眾的令牌。 TrackingId: ******, SystemTracker:*****.servicebus.windows.net:Endpoint=sb:/******.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=** *****

我沒有更改任何設置,使用默認連接字符串(就我所見,在任何地方都沒有設置觀眾)並且它失敗了。 有任何想法嗎?

當 javascript 中的設備名稱與您生成的 SAS 密鑰中的發布者名稱不同步時,通常會出現問題。

例如

在此處輸入圖片說明

當代碼中的 deviceName 變量(在 POST URL 中使用)與 SAS 鍵中的發布者名稱匹配時,無論是否注釋掉附加標頭,事情都可以正常工作。

當我將設備名稱更改為與 SAS 密鑰中的發布者不匹配時,它會立即引發無效授權令牌受眾錯誤。

只要 deviceName 與 SAS 中的 Publishers 標記相匹配,這件事一整天都在正常工作,並且注釋掉了附加標頭。

嘗試驗證並查看它是否有幫助。

據我所知,如果你README.md閱讀了Azure/azure-sdk-for-node README.md文檔,你會發現 Azure 服務總線有如下三個節點包。

  1. Azure 服務模塊中的azure-sb
  2. Azure 資源管理 (ARM) 中的azure-arm-sb
  3. Azure 服務管理 (ASM) 中的azure-asm-sb

實際上,他們要求您使用不同的身份驗證方式來使用不同的功能,請仔細查看文檔Authentication.md

所以對於azure-sb ,它似乎用於訪問 Azure ServiceBus 服務,就像下面所說的 npm 包描述。

適用於 Node.js 的 Microsoft Azure SDK - 庫

該項目提供了一個用於訪問 Azure ServiceBus 服務的 Node.js 包。

要為服務總線實例創建隊列,請參閱相關的 REST API Create Queue ,這是一個資源管理 API。 所以我推薦你需要的正確節點包是azure-arm-sb with Service Principal Authentication

沒有交互的示例代碼如下所示。

const Azure = require('azure');
const MsRest = require('ms-rest-azure');
const ServiceBusManagementClient = require("azure-arm-sb");

MsRest.loginWithServicePrincipalSecret(
  'clientId or appId',
  'secret or password',
  'domain or tenantId',
  (err, credentials) => {
    if (err) throw err

    const client = new ServiceBusManagementClient(credentials, 'subscriptionId');

    // ..use the client instance to manage service resources.
    client.Queues.createOrUpdate(resourceGroupName, namespaceName, queueName, parameters: sbQueue, function(sbq) {
    })

  }
);

請參閱azure-arm-sb package更多詳細信息。 希望能幫助到你。

azure-sb庫是較舊的服務總線 SDK。 雖然我認為它應該可以工作,但我建議使用最近發布的@azure/service-bus的最新版本 7.0.0。

版本 7 提供ServiceBusAdministrationClient ,可讓您管理服務總線實體,支持使用連接字符串和 Azure Active Directory 憑據進行身份驗證。

對於這個問題中的問題,這里是一個使用ServiceBusAdministrationClient顯示隊列創建的示例 - AdministrationClient.ts

我知道這是一個遲到的回復,但以防萬一有人遇到節點的舊服務總線 SDK 的問題並登陸這里,請參閱下面的鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM