azure - azure 服务总线订阅是否像队列一样?
问题描述
这可能是一个愚蠢的问题,但我无法通过阅读文档找到明确的答案。
这是我从文档中了解到的:
所以假设你有一个队列,你可以向它发送多条消息,并且有多个客户端/阅读器连接到队列。在这种情况下,每条消息将仅由一个客户端/阅读器接收。
现在假设您已经创建了一个主题,并向该主题发送消息。你有几个客户/读者,他们每个人都订阅了这个主题;在这种情况下,每个客户端/阅读器都将收到发送到该主题的所有消息。
但这是我想知道的:
是否可以创建一个主题,一个订阅;然后将多个客户端/读者连接到同一个订阅?如果是这样; 然后我可以假设每条消息只会被一个客户/读者接收吗?
(或者,这不可能吗,我们是否需要创建一个队列;然后将该队列链接到订阅,并在队列上创建多个读取器。)
附言; 我知道只有一个订阅的主题是没有意义的。我真正想到的是一个具有多个订阅的主题,每个订阅可能有零个、一个或多个客户端读取它。
解决方案
是否可以创建一个主题,一个订阅;然后将多个客户端/读者连接到同一个订阅?
是的,当然可以这样做。多个客户/读者可以从一个订阅中读取。
如果是这样; 然后我可以假设每条消息只会被一个客户/读者接收吗?
是的,每条消息只会被一个客户/读者接收。Peek/Lock
客户端可以在任一模式或模式下读取消息Receive/Delete
以保证排他性。
当在Peek/Lock
模式下获取消息时,接收消息的客户端会在一定时间内获得对消息的排他锁,并且在此期间,其他客户端将看不到该消息。如果客户端处理消息并将其删除,那么其他客户端将永远看不到它。如果客户端在此期间无法处理该消息,则该消息将在此之后对其他客户端可见,并且其他客户端也可以读取该消息。
在Receive/Delete
模式下获取消息时,一旦客户端收到消息,它将从服务器中删除,因此其他客户端无法获取该消息。
客户端也可以在Peek
模式下获取消息,但在这种情况下,所有其他客户端也可以使用相同的消息。
在您的场景中,您实际上是在将订阅用作队列,您最好只使用队列而不是使用主题和订阅。
推荐阅读
- flutter - ThemeData inheritTheme = Theme.of(context, shadowThemeOnly: true) 错误
- azure - Traefik 作为 Azure 上的 Kubernetes Ingress - 为 Traefik 服务分配静态 IP
- vue.js - 通过 URL 处理数据到 vue 组件
- c# - 更新到 VS 16.9.0 后:C# 7.3 中不提供“仅初始化设置器”功能。请使用语言版本 9.0 或更高版本
- angular - 屏幕阅读器无法识别延迟加载路由器 Angular 10 中的主要地标
- javascript - 如何使用 map 方法调用事件侦听器上的函数来更改类
- foreach - 无法以编程方式更新媒体字段
- android - ionic 5 - 键盘在横向模式下隐藏输入和页面内容
- html - 在 Word 2016/2019 中打开 HTML 文件会忽略图像大小
- c++ - C ++生成器用于扭曲排列(减少每个位置)