我有一个有点哲学上的问题。我们正在使用存储队列来处理“票证”。我们实现的方法是拥有一个后台服务(工作人员角色),该服务正在轮询存储队列并找出是否有待处理的凭单。我们所做工作的性质是季节性的。这意味着不会一直有待处理的票证。我们面临的问题是-由于多个辅助角色实例正在不断轮询存储队列,因此,由于调用了太多GetMessage(),我们对成本产生了影响。
我遇到了具有基于事件的功能的Service Bus队列。此处,我们具有OnMesage()的概念,每次在服务总线队列上有新消息可用时都会调用该概念。
但是我的问题是-OnMessage()是否继续并在内部调用Receive()?这意味着它只是语法糖,在内部仍在进行轮询,并且在Service Bus Queue情况下也会对成本产生影响吗?
任何对此的见解都会有所帮助。
答案 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
也不例外。这是在低层接收操作之上的高层抽象。