我通过此npm软件包@azure/events-hub
将azure事件中心用于项目我想知道是否有一种方法可以使事件接收器在处理完先前接收到的事件后仅接收新事件。关键是我想一次处理一个事件。 我目前的观察是,一旦事件可用,它将向处理程序发送事件。
使用的api是文档中的client.receive(partitionId, onMessage, onError)
。
想知道是否有办法使用此api实现上述行为。
答案 0 :(得分:1)
$to = "yourname@yourdomain.com"; // Add your email address inbetween the "" replacing yourname@yourdomain.com - This is where the form will send a message to.
$subject = "Website Contact Form: $name";
$body = "You have received a new message from your website contact form.\n\n"."Here are the details:\n\nName: $name\n\nEmail: $email\n\nPhone: $phone\n\nMessage:\n$message";
$header = "From: noreply@yourdomain.com\n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com.
$header .= "Reply-To: $email";
方法返回一个RecieverHandler对象,您可以使用其client.receive()
方法来停止流。然后,您将使用新的stop()
重新启动它。
另一种选择是使用client.receive()
,其中最大批处理大小设置为1。
这两个选项都不是理想选择-正如Peter Bons所提到的那样,Event Hubs并不是为缓慢滴灌数据而设计的。该服务假定您将能够以传入消息的相同速率接受消息,并且仅每个分区1个接收器。服务总线确实是一个不错的选择。您可以选择一次接收多少条消息,并连接多个接收方,每个接收方一次处理一条消息,以扩展解决方案。
答案 1 :(得分:0)
您所描述的是需要承受背压,@azure/event-hubs
软件包的最新版本确实解决了此问题。它确保仅在处理先前收到的事件之后才接收事件。默认情况下,您将批量接收大小为10的事件,并且此大小是可配置的。
如果您需要升级当前的应用程序以使用该软件包的最新版本,请参见migration guide from v2 to v5。