天青服务总线订阅是否像队列一样?

时间:2019-12-01 16:27:15

标签: azure azureservicebus servicebus azure-servicebus-queues azure-servicebus-topics

这可能是一个愚蠢的问题,但我无法通过阅读文档找到明确的答案。

这是我从文档中了解的信息:

因此,假设您有一个队列,则可以向它发送多条消息,并且有多个客户端/阅读器连接到该队列。在这种情况下,每封邮件将仅由一个客户端/阅读器接收。

现在假设您已经创建了一个主题,并向该主题发送消息。并且您有几个客户/阅读器,每个客户/阅读器都对该主题进行了订阅。在这种情况下,每个客户端/阅读器都会收到发送给该主题的所有消息。

但这是我想知道的:

是否可以创建一个订阅主题?然后将多个客户端/阅读器连接到同一订阅? 如果是这样;然后我可以假设每条消息将仅由一个客户端/阅读器接收吗?

(或者,这是不可能的,我们是否需要创建一个队列;然后将该队列链接到订阅,并在该队列上创建多个读取器。)

PS;我知道只订阅一个主题就没有意义。我真正想到的是一个具有多个订阅的主题,每个订阅可能有零个,一个或多个客户从中读取内容。

2 个答案:

答案 0 :(得分:0)

您对文档的理解完全正确。对于您的问题,您应该创建一个具有多个订阅的主题,然后每个客户端都可以通过该主题接收分配给他们的消息。

实际上,服务总线主题和订阅支持发布/订阅消息传递通信模型。使用主题和订阅时,分布式应用程序的组件不会彼此直接通信;相反,它们通过一个主题来交换消息,该主题充当两者之间的中介。

enter image description here

如果您不想使用上述模型,则可以选择eventhub,它会满足您的要求。您可以根据需要创建分区和应用程序。

答案 1 :(得分:0)

  

是否可以创建一个订阅主题?接着   将多个客户端/阅读器连接到同一订阅?

是的,确实可以这样做。多个客户/读者可以从一个订阅中阅读。

  

如果是的话;然后我可以假设每条消息都会被   只有一位客户/读者?

是的,每条消息将仅由一个客户端/阅读器接收。客户可以以Peek/Lock模式或Receive/Delete模式阅读邮件,以确保排他性。

Peek/Lock模式提取一条消息时,接收到该消息的客户端会在一定期间内获得对该消息的独占锁定,并且在该期间内,其他客户端将看不到该消息。如果客户端处理该消息并将其删除,则其他客户端将永远看不到该消息。如果客户端在这段时间内无法处理该消息,则该消息对其他客户端可见,之后其他客户端也可以阅读该消息。

Receive/Delete模式提取一条消息时,客户端一收到该消息,便会将其从服务器中删除,因此其他客户端都无法获得该消息。

客户端也可以以Peek模式获取消息,但是在这种情况下,所有其他客户端也可以使用相同的消息。


在您的方案中,您实质上是将订阅用作队列,而最好只使用队列而不是使用主题和订阅。