出于明显的原因,连接字符串/域名的某些部分被星号所迷惑。
我正在使用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:授权标头包含 受众群体错误的令牌。 跟踪号码: ******, SystemTracker:*****。servicebus.windows.net:Endpoint=sb:/ ******。servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey = *******
我没有使用默认的连接字符串(据我所知在任何地方都没有设置观众)来更改任何设置,但是失败了。有什么想法吗?
答案 0 :(得分:0)
问题通常在javascript中的设备名称与您生成的SAS密钥中的发布者名称不同步时出现。
例如
当代码中的deviceName变量(在POST URL中使用)与SAS密钥中的发布者名称匹配时,无论其他标题是否已注释掉,都可以正常工作。
当我将设备名称更改为与SAS密钥中的发布者不匹配时,它将立即引发“无效授权令牌受众”错误。
只要deviceName与SAS中的Publishers令牌匹配,该东西就可以正常工作了,注释了其他标头。
尝试验证并查看是否有帮助。
答案 1 :(得分:0)
据我所知,如果您仔细阅读了Azure/azure-sdk-for-node
的文档README.md
,将发现如下所示的Azure Service Bus的三个节点程序包。
azure-sb
在Azure service modules azure-arm-sb
在Azure Resource Management (ARM) azure-asm-sb
在Azure Service Management (ASM) 实际上,他们要求您使用不同的身份验证方式来使用不同的功能,请仔细阅读文档Authentication.md
。
因此,对于azure-sb
来说,它似乎用于访问Azure ServiceBus服务,如下面所述的npm软件包描述。
用于Node.js的Microsoft Azure SDK-库
该项目提供用于访问Azure ServiceBus服务的Node.js程序包。
要为服务总线实例创建队列,请参考相关的REST API Create Queue
,它是资源管理API。因此,我建议您所需的正确的节点软件包是azure-arm-sb
和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
的更多详细信息。希望对您有所帮助。
答案 2 :(得分:0)
azure-sb
库是较旧的服务总线SDK。尽管我认为它应该可以工作,但是我建议使用最近发布的@azure/service-bus
的最新版本7.0.0。
版本7提供了ServiceBusAdministrationClient
,可让您管理服务总线实体,并通过连接字符串和Azure Active Directory凭据支持身份验证。
对于此问题中的问题,这是一个使用ServiceBusAdministrationClient
显示队列创建的示例-administrationClient.ts
我知道这是一个较晚的答复,但以防万一有人遇到旧的节点服务总线SDK的问题并降落在此处,请参阅下面的链接。