Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Event handling 确认Azure事件网格中的事件传递_Event Handling_Azure Eventgrid - Fatal编程技术网

Event handling 确认Azure事件网格中的事件传递

Event handling 确认Azure事件网格中的事件传递,event-handling,azure-eventgrid,Event Handling,Azure Eventgrid,谷歌的发布/订阅服务为消息订阅者提供了一个端点,以明确确认消息的成功传递。如果未使用此端点,则订阅服务器必须在超时之前返回200响应,否则发布/订阅将认为消息传递不成功,并将在超时后重试发送。 因此,对于长时间运行的订阅进程,可以在运行主进程之前首先发送确认,而不是等待进程完成 我在Azure事件网格中找不到类似的机制,因此如果事件处理程序占用了很长时间(根据超时仅为30秒),那么在过程中间,事件网格重试将更多事件发送到同一订阅服务器: 事件网格在传递消息后等待30秒以等待响应。30秒后,如果终

谷歌的发布/订阅服务为消息订阅者提供了一个端点,以明确确认消息的成功传递。如果未使用此端点,则订阅服务器必须在超时之前返回200响应,否则发布/订阅将认为消息传递不成功,并将在超时后重试发送。 因此,对于长时间运行的订阅进程,可以在运行主进程之前首先发送确认,而不是等待进程完成

我在Azure事件网格中找不到类似的机制,因此如果事件处理程序占用了很长时间(根据超时仅为30秒),那么在过程中间,事件网格重试将更多事件发送到同一订阅服务器:

事件网格在传递消息后等待30秒以等待响应。30秒后,如果终结点没有响应,则消息将排队等待重试。事件网格使用指数退避重试策略进行事件传递

在事件网格中是否真的有明确的方式来确认成功接收到事件? 我在EventGridClient中发现了一个名为LongRunningOperationRetryTimeout的属性,但将此属性设置为一个大值将延迟重试,而实际需要重试时


我知道我可以使用其他机制,如存储队列或持久功能,但我希望在修改代码之前查看事件网格的可用选项。

事件网格不确认事件传递。从发布者的角度来看,这并不重要,因为发布者和订阅者之间不应该存在耦合。如果订阅服务器不可用或无法接收事件,事件网格将重试。如果消息不可交付,则可以配置死信队列


另一种方法是使用队列(服务总线或队列存储)或主题(服务总线)作为处理程序。通过这种方式,事件被转发到订阅者,消息被保证传递。参见和。

非常感谢您的回答,肖恩。您说:“如果订阅服务器不可用或无法接收事件,事件网格将重试。”这是正确的,但不完整。-事实上,即使事件已成功传递,但事件网格在30秒内未收到响应,它也会将其视为失败的传递尝试,并将继续重试。-这是我的问题因此,事件网格确实关心事件的成功交付。成功传递意味着在30秒内收到响应。任何超过30秒的处理程序都不能与事件网格一起使用。当然,可能会发生重复。如果您无法处理重复数据,则启用重复数据消除的Service Bus作为处理程序可能会有所帮助。30秒的限制是关键。我也遇到了这个问题。