Compartilhar via

为 Azure 服务总线队列或订阅启用消息会话

Azure Service Bus会话允许对相关消息的无绑定序列进行联合有序处理。 会话可在 先出(FIFO)请求-响应 模式中使用。 有关详细信息,请参阅 消息会话。 本文展示了为服务总线队列或订阅启用会话的不同方法。

重要

  • Service Bus的基本层不支持会话。 标准套餐和高级套餐支持开展会话。 有关这些层之间的差异,请参阅 Service Bus 定价
  • 在创建队列或订阅后,不能启用或禁用消息会话。 只能在创建队列或订阅时执行此操作。

使用 Azure 门户

在 Azure 门户中创建 queue 时,请选择 Enable 会话如下图所示。

在创建队列时启用会话

在 Azure 门户中为主题创建订阅时,请选择 启用会话,如下图所示。

在创建订阅时启用会话

使用Azure CLI

若要创建启用了消息会话的队列,请使用将az servicebus queue create设置为--enable-sessiontrue命令。

az servicebus queue create \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --name myqueue \
    --enable-session true

若要为启用了消息会话的主题创建订阅,请使用az servicebus topic subscription create命令,并将--enable-session设置为true

az servicebus topic subscription create \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --topic-name mytopic \
    --name mysubscription \
    --enable-session true

使用 Azure PowerShell

若要创建启用了消息会话的队列,请使用将New-AzServiceBusQueue设置为-RequiresSession$True命令。

New-AzServiceBusQueue -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -QueueName myqueue `
    -RequiresSession $True

若要为启用了消息会话的主题创建订阅,请使用New-AzServiceBusSubscription命令,并将-RequiresSession设置为true

New-AzServiceBusSubscription -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -TopicName mytopic `
    -SubscriptionName mysubscription `
    -RequiresSession $True

使用模板

若要创建启用消息会话的队列,请在“队列属性”部分中将requiresSession设置为true。 有关详细信息,请参阅 Microsoft.ServiceBus 命名空间/队列模板参考

@description('Name of the Service Bus namespace')
param serviceBusNamespaceName string

@description('Name of the Queue')
param serviceBusQueueName string

@description('Location for all resources.')
param location string = resourceGroup().location

resource serviceBusNamespace 'Microsoft.ServiceBus/namespaces@2024-01-01' = {
  name: serviceBusNamespaceName
  location: location
  sku: {
    name: 'Standard'
  }

  resource queue 'queues' = {
    name: serviceBusQueueName
    properties: {
      requiresSession: true
    }
  }
}

若要为启用了消息会话的主题创建订阅,应在订阅属性部分中设置requiresSessiontrue。 有关详细信息,请参阅 Microsoft.ServiceBus 命名空间/主题/订阅模板参考

@description('Name of the Service Bus namespace')
param serviceBusNamespaceName string

@description('Name of the Topic')
param serviceBusTopicName string

@description('Name of the Subscription')
param serviceBusSubscriptionName string

@description('Location for all resources.')
param location string = resourceGroup().location

resource serviceBusNamespace 'Microsoft.ServiceBus/namespaces@2024-01-01' = {
  name: serviceBusNamespaceName
  location: location
  sku: {
    name: 'Standard'
  }

  resource topic 'topics' = {
    name: serviceBusTopicName
    properties: {
      maxSizeInMegabytes: 1024
    }

    resource subscription 'subscriptions' = {
      name: serviceBusSubscriptionName
      properties: {
        requiresSession: true
      }
    }
  }
}

后续步骤

尝试使用所选语言的示例来探索Azure Service Bus功能。

在下面查找较旧的.NET和Java客户端库的示例:

注意

2026 年 9 月 30 日,我们将停用 Azure Service Bus SDK 库 WindowsAzure.ServiceBus Microsoft.Azure。ServiceBus 和 com.microsoft。azure.servicebus 不符合Azure SDK准则。 我们还将结束对 SBMP 协议的支持,因此在 2026 年 9 月 30 日之后,你将无法再使用此协议。 在该日期之前迁移到最新的 Azure SDK 库,这些库提供关键的安全更新和改进的功能。

尽管旧库仍可在 2026 年 9 月 30 日以后使用,但它们将不再从Azure获得官方支持和更新。 有关详细信息,请参阅支持停用公告