存储队列与服务总线队列-轮询/成本问题

时间:2018-11-01 06:09:46

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

我有一个有点哲学上的问题。我们正在使用存储队列来处理“票证”。我们实现的方法是拥有一个后台服务(工作人员角色),该服务正在轮询存储队列并找出是否有待处理的凭单。我们所做工作的性质是季节性的。这意味着不会一直有待处理的票证。我们面临的问题是-由于多个辅助角色实例正在不断轮询存储队列,因此,由于调用了太多GetMessage(),我们对成本产生了影响。

我遇到了具有基于事件的功能的Service Bus队列。此处,我们具有OnMesage()的概念,每次在服务总线队列上有新消息可用时都会调用该概念。

但是我的问题是-OnMessage()是否继续并在内部调用Receive()?这意味着它只是语法糖,在内部仍在进行轮询,并且在Service Bus Queue情况下也会对成本产生影响吗?

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

1 个答案:

答案 0 :(得分:1)

Azure Service Bus客户端正在使用长时间轮询从代理检索消息。 默认情况下,它设置为1分钟或收到消息时。因此,如果您有一条消息显示的时间早于1分钟,则将对其进行检索,并且将出现1分钟的另一次民意调查。 public function Op_insert($data){ $count = count($data['name']); for($i = 0; $i<$count; $i++){ $new_data[] = array( 'Stock' =>$data['Stock'][$i], 'Rate'=>$data['Rate'][$i], 'Amount' =>$data['Value'][$i] ); } $this->db->insert_batch('opstock', $new_data); } / OnMessage也不例外。这是在低层接收操作之上的高层抽象。