我有非常基本的架构:
队列和工作者(后处理服务)中的Web API队列消息出列并处理该消息 .
The problem is that the Web API doesn't know when the messaged has been processed by the Worker .
工作者是否可以向队列发出警告消息已成功处理并且队列发送回Web API“处理完成消息”事件?
One solution that I was thinking on:
在Web API对消息进行排队后,它会每隔几秒检查一次消息状态:
If the message status is with "Peck-Lock" - 邮件仍在处理中 .
If the message not found on the Queue - 邮件已处理(成功或失败并不重要) .
但微软没有预先制定的解决方案吗?
1 回答
许多需要此类报告的体系结构由一个单独的队列处理,从处理器到请求者 . 那个's why there'实际上甚至是BrokeredMessage对象上的ReplyTo property . 方法是请求者拥有它自己正在观察的队列 . 当它创建一条消息时,它会设置ReplyTo属性并将其发送 . 当worker处理消息时,它使用原始消息提供的队列路径将完成消息发送回请求者 .
根据您的需要,您的整个前端可能只有一个队列,或者每个实例可能拥有自己的队列 . 请注意,在具有可能是瞬态的机器的分布式系统中,让每个Web API前端都有自己的队列可能会带来一些复杂性 .
通常这是在请求者需要知道某些内容已完成以便以某种方式进行通信时完成的 . 例如,Web请求进入处理 . 请求被放入队列并在后端处理,并且完成消息被返回到前端,在那里它被拾取并且向用户发送通知(在某些情况下通过SignalR,其中有背板到位)您不必担心哪个前端服务器收到了响应消息 .
除了通过直接与请求者通信或通过队列传递完成之外,没有什么可以让您观察来自另一台机器的消息的完成 . 检查邮件状态对您没有帮助,因为除非您定期获得对邮件的新引用,否则这些信息不会更改,如果您处理的邮件很多,则无法很好地扩展 .