用于 JavaScript 的 Azure 存储队列客户端库
Azure存储队列在应用程序组件之间提供云信息. 在为规模设计应用程序时,应用程序组件往往被去钩,以便它们能够独立地进行规模化. 队列存储为应用程序组件之间的通信提供同步消息,无论是在云中运行,还是在桌面上运行,还是在一个premies服务器上运行,还是在移动设备上运行. 队列存储还支持管理同步任务并构建进程工作流程.
这个工程在JavaScript中提供了一个客户端库,使得它更容易地消费Azure存储队列服务.
使用此软件包中的客户端库 :
- 获取/设置队列服务属性
- 创建/列表/删除队列
- 发送/接收/Peek/ Clear/Update/删除队列信件
密钥链接 :
开始
目前得到支持的环境
- 节点.js的LTS版本
- Safari,Chrome,Edge,和Firefox的最新版本.
看我们的 支助政策 更多细节.
先决条件
安装软件包
为 JavaScript 安装 Azure 存储队列客户端库的首选方法是使用 npm 包管理器. 键入下列终端窗口:
npm install @azure/storage-queue
认证客户端
Azure存储器支持几种认证方法. 为了与 Azure Quee 存储服务互动, 您需要创建存储客户端实例 QueueServiceClient 或者说 QueueClient 举个例子 见 用于创建 QueueServiceClient 学习更多关于认证.
Azure 活动目录
Azure Quee存储服务支持使用 Azure Active Directory来认证请求到它的API. 这个 @azure/identity 软件包提供了各种证书类型,应用程序可用来做到这一点。 请看 读取 @azure/identity 需要更多的细节和样本来启动.
兼容性
这个库与Node.js和浏览器兼容,并与LTS Node.js版本(QQ8.16.0)和Chrome,Firefox和Edge等最新版本进行验证.
网络工人
这个库要求某些DOM对象在浏览器中使用时可以全局取用,而网页工人默认不会提供. 您需要多填这些, 才能让这个图书馆在网络工作人员中工作 .
详情请参见我们 在网络工人中使用Azure SDK的文档
此库依赖于在网络工人使用时需要加载外部多填充的 DOM API :
节点J和浏览器之间的差异
节点(Node.js)和浏览器运行时间有差异. 启动此库时, 请注意 API 或 标有 "绝对是无处可逃" 或者说 "绝对是活在丛生"。 。 。 .
以下特性,界面,类或函数仅在Node.js中提供
- 基于账户名称和账户密钥的共享密钥授权
StorageSharedKeyCredential
- 共享访问签名( SAS) 生成
generateAccountSASQueryParameters()generateQueueSASQueryParameters()
Java 脚本套装
要在浏览器中使用此客户端库,首先需要使用捆绑器. 关于如何做到这一点的详情,请参见我们 捆绑文件。 。 。 .
(简体中文)
你需要设置 跨欧林资源共享 用于浏览器的存储账户规则。 到 Azure 门户网站和 Azure 存储探索器, 找到您的存储账户, 为 blob/ queue/ file/ table 服务创建新的 CORS 规则 .
例如,您可以按照 CORS 设置创建调试程序。 但请根据生产环境的要求,精心定制设置.
- 允许来源: *
- 允许动词: DELETE, GET, HEAD, MERGE, POST, OPTIONS, PUT
- 允许的标题 : *
- 已曝光标题 : *
- 最大年龄(秒):86400
关键概念
A 队列是 Azure 存储队列服务账户内发送/接收信件的数据存储器 连接客户端之间.
我们图书馆中与这些服务有关的关键数据类型是:
- A 类
QueueServiceClient代表连接( 通过 URL) 给定 存储账户 在Azure存储队列服务中,并提供API来操纵其队列. 它被认证为服务,可用于创建QueueClient对象,以及创建、删除、列出服务中的队列. - A 类
QueueClient代表单人 队列 在存储账户。 它可用于操纵队列中的信息,例如发送,接收,并偷看队列中的信息.
实例
导入软件包
要使用客户端, 请导入软件包到您的文件中 :
import * as AzureStorageQueue from "@azure/storage-queue";
或者,有选择地仅导入所需的类型:
import { QueueServiceClient, StorageSharedKeyCredential } from "@azure/storage-queue";
创建队列服务客户端
这个 QueueServiceClient 需要队列服务的 URL 和访问证书 。 也可以选择接受 options 参数.
与 DefaultAzureCredential 从 @azure/identity 软件包
建议的即兴演奏方式a QueueServiceClient
设置 : 引用 - 授权使用 Azure Active 目录从客户端应用程序访问 blobs 和队列 - https://learn.microsoft.com/azure/storage/common/storage-auth-aad-app 互联网档案馆的存檔,存档日期2013-12-22
-
注册新的 AAD 应用程序, 并允许代表登录用户访问 Azure 存储器
- 在 Azure 活动目录( azure-portal) 中注册新的应用程序 - https://learn.microsoft.com/azure/活出-指导/develop/quickstart-register-app. 互联网档案馆的存檔,存档日期2013-12-21
- 在那个
API permissions区域,选择Add a permission选择Microsoft APIs。 。 。 . - 选择
Azure Storage并选择旁边的复选框user_impersonation然后单击Add permissions。这将使应用程序能够代表登录用户访问Azure存储器.
-
允许在Azure门户网站上访问RBAC的Azure存储队列数据
- 空管局在排队和排队上的角色 https://learn.microsoft.com/azure/storage/common/storage-auth-aad-rbac-portal 互联网档案馆的存檔,存档日期2013-12-21。 。 。 .
- 在Azure门户网站,去你的存储账户 并分配 存储队列数据贡献器 角色到注册的 AAD 应用程序
Access control (IAM)选项卡(在azure-portal中您存储账户的左侧导航栏).
-
样本的环境设置
- 从您的 AAD 应用程序的概览页面中,请注意
CLIENT ID财务报告和审定财务报表TENANT ID。在“证书和机密”标签中,创建一个机密,并将此记下. - 确保你有
AZURE_TENANT_ID, (中文(简体) ),AZURE_CLIENT_ID, (中文(简体) ),AZURE_CLIENT_SECRET作为成功执行样本的环境变量(can liberation process.env.).
- 从您的 AAD 应用程序的概览页面中,请注意
import { DefaultAzureCredential } from "@azure/identity";
import { QueueServiceClient } from "@azure/storage-queue";
const account = "<account>";
const credential = new DefaultAzureCredential();
const queueServiceClient = new QueueServiceClient(
`https://${account}.queue.core.windows.net`,
credential,
);
[注 -- -- 以上步骤只针对节点.js]
使用连接字符串
或者,你可以即时 QueueServiceClient 使用 fromConnectionString() 以全连接字符串作为参数的静态方法。 (连接字符串可以从Azure门户网站获得. [完全可以在 代码.Js运行]
import { QueueServiceClient } from "@azure/storage-queue";
const connectionString = "<connection string>";
const queueServiceClient = QueueServiceClient.fromConnectionString(connectionString);
与 StorageSharedKeyCredential
或者,你即兴表演 QueueServiceClient 带有 StorageSharedKeyCredential 路过 accountName 财务报告和审定财务报表 accountKey 作为论据。 (账户名和账户密钥的值可以从Azure门户网站获得. )
[完全可以在 代码.JS运行]
import { StorageSharedKeyCredential, QueueServiceClient } from "@azure/storage-queue";
// Enter your storage account name and shared key
const account = "<account>";
const accountKey = "<accountkey>";
// Use StorageSharedKeyCredential with storage account and account key
// StorageSharedKeyCredential is only available in Node.js runtime, not in browsers
const sharedKeyCredential = new StorageSharedKeyCredential(account, accountKey);
const queueServiceClient = new QueueServiceClient(
`https://${account}.queue.core.windows.net`,
sharedKeyCredential,
{
retryOptions: { maxTries: 4 }, // Retry options
userAgentOptions: {
userAgentPrefix: "BasicSample V10.0.0",
}, // Customized telemetry string
},
);
与 SAS Token 连接
还有... 你可以即兴表演 QueueServiceClient 带有共享访问签名(SAS). 您可以从 Azure 端口获得 SAS 令牌或使用 generateAccountSASQueryParameters()。 。 。 .
import { QueueServiceClient } from "@azure/storage-queue";
const account = "<account name>";
const sas = "<service Shared Access Signature Token>";
const queueServiceClient = new QueueServiceClient(
`https://${account}.queue.core.windows.net?${sas}`,
);
在此账户中列出队列
使用 QueueServiceClient.listQueues() 函数以排列队列,
与新的 for-await-of 语法 :
import { QueueServiceClient } from "@azure/storage-queue";
import { DefaultAzureCredential } from "@azure/identity";
const account = "<account>";
const queueServiceClient = new QueueServiceClient(
`https://${account}.queue.core.windows.net`,
new DefaultAzureCredential(),
);
let i = 1;
for await (const item of queueServiceClient.listQueues()) {
console.log(`Queue${i++}: ${item.name}`);
}
或者没有 for-await-of数字 :
import { QueueServiceClient } from "@azure/storage-queue";
import { DefaultAzureCredential } from "@azure/identity";
const account = "<account>";
const queueServiceClient = new QueueServiceClient(
`https://${account}.queue.core.windows.net`,
new DefaultAzureCredential(),
);
let i = 1;
const iterator = queueServiceClient.listQueues();
let { done, value } = await iterator.next();
while (!done) {
console.log(`Queue${i++}: ${value.name}`);
({ done, value } = await iterator.next());
}
列行列上的完整样本请参见 样本/v12/类型标记/列表。 。 。 .
创建新队列
使用 QueueServiceClient.getQueueClient() 函数以创建新队列.
import { QueueServiceClient } from "@azure/storage-queue";
import { DefaultAzureCredential } from "@azure/identity";
const account = "<account>";
const queueServiceClient = new QueueServiceClient(
`https://${account}.queue.core.windows.net`,
new DefaultAzureCredential(),
);
const queueName = "<valid queue name>";
const queueClient = queueServiceClient.getQueueClient(queueName);
const createQueueResponse = await queueClient.create();
console.log(
`Created queue ${queueName} successfully, service assigned request Id: ${createQueueResponse.requestId}`,
);
向队列发送消息
使用 sendMessage() 在队列中添加消息 :
import { QueueServiceClient } from "@azure/storage-queue";
import { DefaultAzureCredential } from "@azure/identity";
const account = "<account>";
const queueServiceClient = new QueueServiceClient(
`https://${account}.queue.core.windows.net`,
new DefaultAzureCredential(),
);
const queueName = "<valid queue name>";
const queueClient = queueServiceClient.getQueueClient(queueName);
// Send a message into the queue using the sendMessage method.
const sendMessageResponse = await queueClient.sendMessage("Hello World!");
console.log(
`Sent message successfully, service assigned message Id: ${sendMessageResponse.messageId}, service assigned request Id: ${sendMessageResponse.requestId}`,
);
皮克一个消息
QueueClient.peekMessages() 允许在队列前查看一个或多个消息。 这个电话
并不妨碍其他代码访问被偷看的消息.
import { QueueServiceClient } from "@azure/storage-queue";
import { DefaultAzureCredential } from "@azure/identity";
const account = "<account>";
const queueServiceClient = new QueueServiceClient(
`https://${account}.queue.core.windows.net`,
new DefaultAzureCredential(),
);
const queueName = "<valid queue name>";
const queueClient = queueServiceClient.getQueueClient(queueName);
const peekMessagesResponse = await queueClient.peekMessages();
console.log(`The peeked message is: ${peekMessagesResponse.peekedMessageItems[0].messageText}`);
处理信件
消息分两步处理.
- 第一通电话
queueClient.receiveMessages()。这使该队列中发来的其他代码读取信件隐形,默认时间为30秒. - 处理信件时,请拨
queueClient.deleteMessage()带消息的popReceipt。 。 。 .
如果由于硬件或软件故障,您的代码无法处理一个消息,这个双步进程可以确保您代码中的另一个实例可以得到相同的消息并再次尝试.
import { QueueServiceClient } from "@azure/storage-queue";
import { DefaultAzureCredential } from "@azure/identity";
const account = "<account>";
const queueServiceClient = new QueueServiceClient(
`https://${account}.queue.core.windows.net`,
new DefaultAzureCredential(),
);
const queueName = "<valid queue name>";
const queueClient = queueServiceClient.getQueueClient(queueName);
const response = await queueClient.receiveMessages();
if (response.receivedMessageItems.length === 1) {
const receivedMessageItem = response.receivedMessageItems[0];
console.log(`Processing & deleting message with content: ${receivedMessageItem.messageText}`);
const deleteMessageResponse = await queueClient.deleteMessage(
receivedMessageItem.messageId,
receivedMessageItem.popReceipt,
);
console.log(
`Delete message successfully, service assigned request Id: ${deleteMessageResponse.requestId}`,
);
}
删除队列
import { QueueServiceClient } from "@azure/storage-queue";
import { DefaultAzureCredential } from "@azure/identity";
const account = "<account>";
const queueServiceClient = new QueueServiceClient(
`https://${account}.queue.core.windows.net`,
new DefaultAzureCredential(),
);
const queueName = "<valid queue name>";
const queueClient = queueServiceClient.getQueueClient(queueName);
const deleteQueueResponse = await queueClient.delete();
console.log(
`Deleted queue successfully, service assigned request Id: ${deleteQueueResponse.requestId}`,
);
简单的完整实例 QueueServiceClient 假设值为 样本/v12/型号标注/弧度/克克克特.ts。 。 。 .
解决问题
允许伐木可能有助于发现有关失败的有用信息。 为了查看 HTTP 请求和回复的日志,设置 AZURE_LOG_LEVEL 环境变量改为 info。或者,可以在运行时拨打 setLogLevel 输入 @azure/logger数字 :
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
今后的步骤
更多代码样本
捐款
如果您想为图书馆捐钱 请读一下 贡献指南 学习如何构建和测试密码.
另见 存储特定指南 关于为存储库设置测试环境的更多信息.