azure - 如何使“Azure 服务总线”消息由实例池中的单个服务器实例处理?
问题描述
我在 Azure 应用服务中运行了一个 Asp.Net 核心 Web Api。我还想制作一个定期浏览数据库的 BackgroundWorker。如果有必要的记录通过 Azure Bus 向 WebApi 发送消息,WebApi 应该在收到消息时向移动设备发送通知。
如果只有一个 WebApi 实例,则毫无疑问。但是启用了自动缩放。也就是说,在高负载的情况下,可能会有很多 WebApi。并且当 BackgroundWorker 发送一条消息时,它会被许多服务接收,并重复重复发送通知给用户。
是否已经有在这种情况下使用的现成机制?消息的订阅者很多,他们都可以收到,但如果一个人收到了,其他人都不应该收到。
解决方案
有两种接收模式:
- 接收并删除
- 偷看锁
两者都适用于您的情况,因为第一个获取消息的消费者会得到它,而其他消费者将看不到它。
不同之处在于如果发生崩溃会发生什么。使用 ReceiveAndDelete 消息会丢失并且不会被处理。使用 PeekLock 取决于它在崩溃前的距离,消息可能会被处理两次。
https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-queues-topics-subscriptions
推荐阅读
- android - 安卓 | 无法为 15.0.1 版添加所有 Google 库
- ios - Siri Intent Donation for Shortcuts 以错误告终
- sql - 在 MS SQL 中将十六进制转换为十进制不起作用
- sql - 在一个表单内的 Access 中的三个子表单中显示基于相同 id 的记录
- php - 将 PHP 从版本 5.6 升级到 7.2 后 MySQL 服务无法在 Ubuntu 14.04 上启动
- javascript - 如何在javascript的url中传递参数?
- javascript - 使用 array.map() 映射到另一个类
- php - 为什么我不能对这个数组进行排序?
- azure - 数据工厂 v1 将某些标头屏蔽为 http 标头中的凭据
- react-native - 使用本机反应如何获取当前位置的城市名称?