当前位置: 首页 > 知识库问答 >
问题:

Azure服务为同一订户总线多个实例

梁华皓
2023-03-14
public async Task HandleMessage(Microsoft.Azure.ServiceBus.Message message, CancellationToken cancellationToken)
{
    var queueItem = this.converter.DeserializeItem(message);

    var sessionId = // get the session id from the message
    if (string.IsNullOrEmpty(sessionId))
    {
         await this.subscriptionClient.AbandonAsync(message.SystemProperties.LockToken);
         return;
    }

    if (!this.subscriptions.TryGetValue(sessionId, out var subscription))
    {
        await this.subscriptionClient.AbandonAsync(message.SystemProperties.LockToken);
        return;
    }

    await subscription.Call(queueItem);

    // subscription was found and executed. Complete message
    await this.subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
}

但是,问题还是出现了。我唯一的猜测是,当调用abandonasync时,同一个实例再次拾取消息?

我想我真正想问的是,如果我有一个主题订阅客户端的多个实例都指向该主题的同一个订阅者,那么所有实例是否都有可能获得消息的副本?还是不保证。

共有1个答案

易弘亮
2023-03-14

如果我有一个主题订阅客户端的多个实例都指向该主题的同一个订阅服务器,那么所有实例是否都有可能获得消息的副本?还是不保证。

不会。如果所有客户端都指向同一个订阅,那么只有一个客户端会收到该消息。

您遇到了一个与竞争的消费者进行扩展的问题。如果您正在扩展,您永远不知道哪个实例将选择消息。而且由于您的状态是本地的(在每个实例的内存中),这将不时地失败。另外的不利因素是成本。通过在“错误的”实例上获取消息并放弃,您将在消息端支付更高的成本。

 类似资料:
  • 我正在使用代码实现Azure服务总线主题,这些主题可以在以下位置找到:https://docs.microsoft.com/en-us/Azure/service-bus-messaging/service-bus-dotnet-how-to-use-topics-subscriptions 我尝试运行订阅者程序的两个实例,它包含以下方法: 但是,这不允许两个订户都接收消息,它接收的消息是两个订户

  • 来自第三次订阅的消息会发生什么情况,是否会在TTL之后发送到死信队列 有没有办法找出消息未被使用的订阅

  • 我正在使用Azure环境并在其中开发。网的 我正在运行一个web应用程序(ClientApp),它获取客户端数据以执行一系列计算。这些计算是性能密集型的,因此它们在单独的web应用程序(CalcApp)上运行。 当前,ClientApp将计算请求发送给CalcApp。来自每个客户机的请求被放入一个公共队列中,并一次运行一个,即FIFO。我的目标是为每个客户机创建单独的队列,并同时运行多个计算。 我

  • null 输出 谁能解释一下为什么会这样吗?这对我来说有点迷惑?

  • 我已经设法编写了一个小型控制台应用程序来连接到Azure服务总线中的一个主题/订阅。我已经向订阅发送了消息并注册了一个消息处理程序。我看到消息处理程序每60秒轮询一次。例如,是否将轮询间隔延长至30或60分钟?

  • 我想将一个小的JSON消息放入中。消息将具有附加到它的“ProviderID”属性,并且根据筛选规则,该消息将被筛选到特定于提供程序的上 但是,我似乎无法在上指定共享访问策略,以限制第三方提供商仅连接到他们自己的 我假设应该在订阅上设置以便将这些消息发送到另一个并在那里应用特定于提供程序的安全性,这样做是否正确。 或者有其他/更好的/推荐的方法来做这件事。