gpt4 book ai didi

azure - 如果未指定订阅,发送到主题的消息将会丢失

转载 作者:行者123 更新时间:2023-12-02 23:20:21 29 4
gpt4 key购买 nike

在 Azure 服务总线中,如果事件顺序如下,则一切正常 -

  1. 创建主题
  2. 在主题内创建订阅
  3. 向主题发送消息

通过上述方式,发送消息时会触发订阅。这是预期的结果。

但是,如果我们像这样修改上面的序列

  1. 创建主题
  2. 向主题发送消息
  3. 在主题内创建订阅

在这种情况下,由于消息发送到主题时没有订阅,因此当确实创建订阅时,以前发送的消息不会显示在其列表中。这些消息基本上已经“丢失”了。我也无法在 Service Bus Explorer 中看到这些消息。

上面的序列流是相关的,因为我们有分离的发布者和订阅者,其中发布者只发送一条消息,而订阅者在上线时创建订阅并处理它们。不保证发布者和订阅者上线的顺序。

如何在创建订阅之前访问/处理发送到主题的消息?此类消息首先会发生什么?

谢谢

最佳答案

事实证明,上述行为是设计使然 - 如果没有订阅,那么消息就会丢失。

为了克服这个问题,Azure 服务总线提供了一个主题属性,以便在发送消息之前启用消息预过滤。因此,如果没有可用的过滤器/订阅,它将抛出异常

设置主题选项

namespaceManager.CreateTopicAsync(new TopicDescription(topicName)
{
EnableFilteringMessagesBeforePublishing = true
});

发送消息时,检查是否有异常

try
{
await topicClient.SendAsync(brokeredMessage);
}
catch (NoMatchingSubscriptionException ex)
{
// handle the exception, maybe send it to dead letter queue using DeadLetterAsync
}

关于azure - 如果未指定订阅,发送到主题的消息将会丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40613216/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com