【问题标题】:Reading Azure Service Bus Queue读取 Azure 服务总线队列
【发布时间】:2016-06-26 20:52:29
【问题描述】:

我只是想弄清楚如何最好地尽快从 Azure 服务总线队列中检索消息。

我很震惊,没有办法正确订阅通知队列,我将不得不进行轮询。 (除非我错了,在这种情况下文档很糟糕)。

我进行了长时间的轮询,但每 60 秒检查一条消息似乎每月需要花费大约 900 英镑(同样,除非我误解了这一点)。如果我添加一个冗余/第二个服务来轮询它会加倍。

所以我想知道最好/最具成本效益的方法是什么。

基本上我只是想从队列中获取一条消息,对一些内部保存的数据执行 API 查找(可能使用混合服务?),然后可能将一条带有一些附加信息的消息发送回另一个队列。

我查看了工人角色(?)——这是可以做到的吗?

我应该提到我一直在考虑用 node.js 来做这件事。

【问题讨论】:

  • 辅助角色与服务总线无关 - 它们只是无状态的 Windows Server VM,具有特定的配置和扩展方式。
  • 你的价格是怎么来的?服务巴士队列是免费提供的。一条消息的成本是什么
  • 感谢您的回复。我在某个地方看到过,我认为工作人员角色可以收到队列添加的通知,这就是让我问的原因。对于定价,它是在 http 调用的代理连接下进行的,我假设这是轮询正在使用的。在标准层级下,只有前 1000 个是免费的。 azure.microsoft.com/en-gb/pricing/details/service-bus我是不是弄错了,因为那太好了。再次感谢。
  • 看来我可能弄错了。常见问题解答建议收费是针对“并发代理连接的峰值数量”和“峰值按小时计算,除以 744 小时按比例计算一个月”。他们举例如下:“10,000 台设备通过 HTTP 从服务总线队列接收消息,指定非零超时。如果所有设备每天连接 12 小时,您将看到以下连接费用 10,000 个 HTTP 接收连接* 每天 12 小时 * 31 天 / 744 小时 = 5,000 个代理连接。"
  • 因此,如果我的理解是正确的,让脚本每 55 秒执行一次长轮询(允许的最大值),那只能算作一个“并发”连接,对吧?即使它每 55 秒轮询一次?所以这是我允许的 1000 个设备中的 1 个设备 * 24 小时 * 31 天 / 744 小时 = 1 个,对吗?我想问题仍然存在——这是最好/唯一的方法吗?

标签: node.js azure azureservicebus


【解决方案1】:

观看来自 Scott Hanselman 和 Mark Simms 的 Azure Queues 视频。 它是 C#,但你明白了。

https://channel9.msdn.com/Search?term=azure%20queues%20simms#ch9Search

触及:

  • 存储队列与服务总线队列
  • 批量获取消息与一条一条获取消息(粗壮与健谈)
  • 处理有害消息(不良行为者)
  • 其他实现细节
  • 还有很多我现在不记得的东西了

至于您的计算,您可以使用虚拟机、辅助角色(云服务)、应用服务 Web 作业或 Azure Functions。

Webjobs SDK 和 Azure Functions 机器人可以订阅队列事件(消息通知)。

(从 IaaS 到 PaaS 再到 FaaS - Azure Functions - 如果存在这样的东西)。

Azure Functions 已经提供了示例代码作为模板来使用 Node.js 完成所有这些操作。只需创建一个新函数并按照向导进行操作即可。

如果您需要在本地访问数据,则需要考虑与具有站点到站点连接的 VNET 集成,或者混合连接(仅限应用服务!)。 Azure Functions 还不能做到这一点,但其他所有计算都可以。

https://azure.microsoft.com/en-us/documentation/articles/web-sites-hybrid-connection-get-started/ (该教程仅适用于 Windows,但您可以从任何操作系统中提取数据。混合连接管理器必须位于 Windows 机器上,但随后它充当网络上任何主机的反向代理)。

【讨论】:

  • 感谢您的回复。你也回答了我关于函数的问题,因为我看到他们可以访问队列上的消息,但无法访问 prem 数据,这很遗憾。再次感谢。
【解决方案2】:

要轻松处理 Azure ServiceBus Queue,最好的选择似乎是Azure Webjob

ServiceBusTrigger 允许您从 Azure ServiceBus 队列获取消息。

对于 node.js 集成,您应该查看Azure Function。它建立在 webjob SDK 之上并具有 node.js 集成:

在第二篇文章中,有一个关于如何使用 Azure Function 和 nodejs 从队列中获取消息的示例:

module.exports = function(context, myQueueItem) {
    context.log('Node.js ServiceBus queue trigger function processed message', myQueueItem);
    context.done();
};

【讨论】:

  • 感谢您的回答。我看过函数,但不幸的是缺少混合连接。
猜你喜欢
  • 1970-01-01
  • 2017-02-25
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 2018-04-01
  • 2013-08-19
  • 2015-06-08
相关资源
最近更新 更多