有没有办法在 Azure 队列或服务总线中获取“进程完成”消息事件?

Ron*_*Ron 4 servicebus azure azure-queues azureservicebus

我有非常基本的架构:

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

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

Worker 是否可以提醒队列消息已成功处理,并且队列将“处理完成消息”事件发送回 Web API?

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

Web API 对消息进行排队后,它每隔几秒检查一次消息状态:

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

如果在队列中找不到消息- 消息已被处理(成功或不成功并不重要)。

但是微软没有现成的解决方案吗?

Mik*_*eWo 5

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

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

通常,当请求者需要知道某件事已完成以便能够以某种方式进行传达时,就会执行此操作。例如,一个网络请求进来进行处理。请求被放入队列并在后端处理,完成消息返回到前端,前端接收该消息并向用户发送通知(在某些情况下通过 SignalR,它有一个背板)您不必担心哪个前端服务器收到了响应消息)。

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