【问题标题】:Storage Queue vs Service Bus Queue - Polling/Cost question存储队列与服务总线队列 - 轮询/成本问题
【发布时间】:2018-11-02 13:37:53
【问题描述】:

我有一点哲学问题。我们正在使用存储队列来处理“票证”。我们实现的方式是我们有一个后台服务(工作角色),它正在轮询存储队列并找出是否有任何票要处理。我们所做工作的性质是季节性的。这意味着不会一直有票需要处理。我们面临的问题是 - 由于多个工作角色实例不断轮询存储队列,我们​​有成本影响,因为它只是调用了太多的 GetMessage()。

我遇到了具有基于事件功能的服务总线队列。我们有 OnMesage() 的概念,每当有新消息在服务总线队列上可用时,它就会被调用。

但我的问题是 - OnMessage() 是否继续并在内部调用 Receive()?这意味着它只是语法糖,并且在内部它仍在进行轮询,并且在服务总线队列案例中也会产生成本影响吗?

对此的任何见解都会有所帮助。

【问题讨论】:

标签: azure azure-servicebus-queues azure-storage-queues cost-management


【解决方案1】:

Azure 服务总线客户端正在使用 长轮询 从代理检索消息。 默认情况下,它设置为 1 分钟或消息到达时。因此,如果您有一条消息在 1 分钟之前显示,它将被检索,并且会出现另一个 1 分钟的民意调查。 OnMessage/MessageHandler 也不例外。它是在低级接收操作之上的更高层次的抽象。

【讨论】:

  • 谢谢肖恩。这有帮助。这是否意味着我每次 OnMessage() 调用都要为 1 次交易付费?
  • 确实如此。相反,您可以查看 EventGrid 通知来替换消息泵。
  • 这取决于您使用的传输方式。如果您使用 HTTP API,那么是的,它将使用长轮询。但是,如果您使用 AMQP,它会使用持久连接,将事件 推送 到客户端。
  • 基于 AMQP 的 Azure 服务总线将消息推送到客户端。客户端使用长轮询。很确定 AMQP over TCP 和 WebSockets 都是这种情况。 RabbitMQ 将消息推送给消费者,而不是 ASB。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 2015-07-18
相关资源
最近更新 更多