有办法在 Azure 队列或服务总线中获取 "Process Complete" 消息事件吗?

There is a way to get "Process Complete" Message Event in Azure Queue or Service Bus?

我有非常基本的架构:

Web API队列消息在一个Queue和一个Worker(后台处理服务)中出列并处理消息。

问题是 Web API 不知道 Worker 何时处理了消息。

Worker 能否提醒 Queue 消息已成功处理并且 Queue 发送回 Web API "Process Complete Message" 事件?

我正在考虑的一个解决方案:

在 Web API 将消息排队后,它每隔几秒钟检查一次消息状态:

如果消息状态为 "Peck-Lock" - 消息仍在处理中。

如果在队列中找不到消息 - 消息已处理(成功或不成功无关紧要)。

但是 Microsoft 对此没有预制的解决方案吗?

许多需要这种类型的报告返回的体系结构由一个单独的队列处理,从处理器到请求者。这就是为什么 BrokeredMessage 对象上什至还有一个 ReplyTo property。该方法将是请求者也将拥有自己的正在监视的队列。当它创建一条消息时,它会设置 ReplyTo 属性 并继续发送。当 worker 处理消息时,它使用原始消息提供的队列路径将完成消息发送回请求者。

根据您的需要,您的整个前端可能只有一个队列,或者每个实例可能都有自己的队列。请注意,在具有瞬态机器的分布式系统中,让每个 Web API 前端都有自己的队列会带来一些复杂性。

通常这是在请求者需要知道某事已完成以便可以以某种方式进行交流时完成的。比如一个web请求进来做处理。请求被放入队列并在后端处理,完成消息返回到前端,在那里它被拾取并向用户发送通知(在某些情况下通过 SignalR,它有一个适当的背板您不必担心哪个前端服务器收到了响应消息。

除了通过与请求者的直接通信或通过队列来传达完成信息之外,没有任何方法可以让您从另一台机器上观察消息的完成情况。检查消息状态对您没有帮助,因为除非您定期获得对消息的新引用,否则该信息不会更改,如果您处理的消息很多,这将无法很好地扩展。