服务总线如何保证并发?

问题描述 投票:0回答:1

我正在尝试在订阅服务总线的函数应用程序中实现一些有保证的并发性。

为了实现这一目标,我在服务总线中实现了分区。

如果我在服务总线中的消息分发是这样的:

Partition1  Partition2  Partition3
message1    message3    mesaage5
message2    message4    message6

我希望我的函数应用程序调用序列是:

message1 --> message3 -->message5 -->message2 -->message4-->message6

这并没有发生。

我的

host.json
配置是

{
  "version": "2.0",
  "extensions": {
    "serviceBus": {
      "maxConcurrentCalls": 1
    }
  },
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": false,
        "excludedTypes": "Request"
      }
    }
  }
}

有什么办法可以实现这个目标吗?通过使用sessionId还是交易?

azure-functions azureservicebus azure-servicebus-queues
1个回答
0
投票

分区并不是为了并发而设计的。使用 Azure 服务总线进行分区的目的是确保在某些分区遇到问题时,并非所有消息不可用,而是部分消息不可用。

您的配置中的并发设置为 1。因此,您将从随机分区获取消息,一次处理一个消息。如果您需要有保证的订单,那就是消息会话。事务处理适用于处理传入消息后的传出消息。

© www.soinside.com 2019 - 2024. All rights reserved.