Поделиться через


интеграция .NET AspireAzure Service Bus

Облачные приложения часто требуют взаимодействия со службами обмена сообщениями, такими как Azure Service Bus. Службы обмена сообщениями помогают отделять приложения и включать сценарии, использующие такие функции, как очереди, разделы и подписки, атомарные транзакции, балансировка нагрузки и многое другое. Интеграция служебной шины .NET Aspire обрабатывает следующие проблемы для подключения приложения к Azure Service Bus:

  • ServiceBusClient регистрируется в контейнере DI для подключения к Azure Service Bus.
  • Применяет конфигурации ServiceBusClient или непосредственно через код, или через параметры файла конфигурации.

Необходимые условия

Начало работы

Чтобы приступить к работе с интеграцией .NET AspireAzure Service Bus, установите пакет NuGet 📦Aspire.Azure.Messaging.ServiceBus в проект, использующий client, т. е. в проект приложения, которое использует Azure Service Busclient.

dotnet add package Aspire.Azure.Messaging.ServiceBus

Дополнительные сведения см. в dotnet add package или управление зависимостями пакетов в .NET приложениях.

Пример использования

В файле Program.cs вашего проекта с использованием clientвызовите расширение AddAzureServiceBusClient, чтобы зарегистрировать ServiceBusClient для работы через контейнер внедрения зависимостей.

builder.AddAzureServiceBusClient("messaging");

Чтобы получить настроенный экземпляр ServiceBusClient с помощью внедрения зависимостей, необходимо использовать его в качестве параметра конструктора. Например, чтобы получить client из примера сервиса:

public class ExampleService(ServiceBusClient client)
{
    // ...
}

Использование хоста приложения

Чтобы добавить поддержку размещения Azure Service Bus в IDistributedApplicationBuilder, установите 📦Aspire.Хостинг.Azure.ServiceBus пакет NuGet в проекте узла приложения .

dotnet add package Aspire.Hosting.Azure.ServiceBus

В проекте узла приложения зарегистрируйте интеграцию служебной шины и используйте службу с помощью следующих методов:

var builder = DistributedApplication.CreateBuilder(args);

var serviceBus = builder.ExecutionContext.IsPublishMode
    ? builder.AddAzureServiceBus("messaging")
    : builder.AddConnectionString("messaging");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(serviceBus)

Конфигурация

Интеграция служебной шины .NET.NET Aspire предоставляет несколько вариантов настройки ServiceBusClient на основе требований и соглашений проекта.

Использование поставщиков конфигураций

Интеграция служебной шины поддерживает Microsoft.Extensions.Configuration. Он загружает AzureMessagingServiceBusSettings из appsettings.json или других файлов конфигурации с помощью ключа Aspire:Azure:Messaging:ServiceBus.

{
  "Aspire": {
    "Azure": {
      "Messaging": {
        "ServiceBus": {
          "DisableHealthChecks": true,
          "DisableTracing": false,
          "ClientOptions": {
            "Identifier": "CLIENT_ID"
          }
        }
      }
    }
  }
}

Если вы настроили конфигурации в разделе Aspire:Azure:Messaging:ServiceBus файла appsettings.json, можно просто вызвать метод AddAzureServiceBusClient без передачи параметров.

Использование встроенных делегатов

Вы также можете передать делегат Action<AzureMessagingServiceBusSettings> для настройки некоторых или всех встроенных параметров, например, чтобы задать FullyQualifiedNamespace:

builder.AddAzureServiceBusClient(
    "messaging",
    static settings => settings.FullyQualifiedNamespace = "YOUR_SERVICE_BUS_NAMESPACE");

Можно также настроить ServiceBusClientOptions с помощью делегата Action<IAzureClientBuilder<ServiceBusClient, ServiceBusClientOptions>>, второго параметра метода AddAzureServiceBus. Например, чтобы установить идентификатор ServiceBusClient для обозначения client:

builder.AddAzureServiceBusClient(
    "messaging",
    static clientBuilder =>
        clientBuilder.ConfigureOptions(
            static options => options.Identifier = "CLIENT_ID"));

Параметры конфигурации

Следующие настраиваемые параметры предоставляются через класс AzureMessagingServiceBusSettings:

Имя Описание
ConnectionString Строка подключения, используемая для подключения к пространству имен служебной шины.
Credential Учетные данные, используемые для аутентификации в пространстве имен Service Bus.
FullyQualifiedNamespace Полное пространство имен шины Service Bus.
DisableTracing Отключает трассировку для Service Bus client.
HealthCheckQueueName Имя очереди, используемой для проверок работоспособности.
HealthCheckTopicName Название темы, используемой для проверок работоспособности.

как минимум один вариант имени обязателен при включении проверок работоспособности.

Наблюдаемость и телеметрия

.NET .NET Aspire интеграции автоматически настраивают конфигурации журналов, трассировки и метрик, которые иногда называются основами наблюдаемости. Дополнительные сведения об наблюдаемости интеграции и телеметрии см. в .NET.NET Aspire обзоре интеграции. В зависимости от резервной службы некоторые интеграции могут поддерживать только некоторые из этих функций. Например, некоторые интеграции поддерживают ведение журнала и трассировку, но не метрики. Функции телеметрии также можно отключить с помощью методов, представленных в разделе конфигурации .

Лесозаготовка

Интеграция .NET AspireAzure Service Bus использует следующие категории журналов:

  • Azure.Core
  • Azure.Identity
  • Azure-Messaging-ServiceBus

Отслеживание

Заметка

Поддержка служебной шины ActivitySource в пакете SDK Azure для .NET экспериментальна, а форма действий может измениться в будущем без уведомления.

Трассировку можно включить несколькими способами:

  • Установка параметра конфигурации среды выполнения Azure.Experimental.EnableActivitySource на true. Что можно сделать с помощью следующих действий:

    • Вызов AppContext.SetSwitch("Azure.Experimental.EnableActivitySource", true);.

    • Добавьте параметр RuntimeHostConfigurationOption в файл проекта:

      <ItemGroup>
          <RuntimeHostConfigurationOption
               Include="Azure.Experimental.EnableActivitySource"
               Value="true" />
      </ItemGroup>
      
  • Задайте для переменной среды AZURE_EXPERIMENTAL_ENABLE_ACTIVITY_SOURCE значение true.

    • Можно достичь путем цепочки вызова WithEnvironment("AZURE_EXPERIMENTAL_ENABLE_ACTIVITY_SOURCE", "true")

При включении интеграции .NET AspireAzure Service Bus будут выполняться следующие действия трассировки с использованием OpenTelemetry:

  • Message
  • ServiceBusSender.Send
  • ServiceBusSender.Schedule
  • ServiceBusSender.Cancel
  • ServiceBusReceiver.Receive
  • ServiceBusReceiver.ReceiveDeferred
  • ServiceBusReceiver.Peek
  • ServiceBusReceiver.Abandon
  • ServiceBusReceiver.Complete
  • ServiceBusReceiver.DeadLetter
  • ServiceBusReceiver.Defer
  • ServiceBusReceiver.RenewMessageLock
  • ServiceBusSessionReceiver.RenewSessionLock
  • ServiceBusSessionReceiver.GetSessionState
  • ServiceBusSessionReceiver.SetSessionState
  • ServiceBusProcessor.ProcessMessage
  • ServiceBusSessionProcessor.ProcessSessionMessage
  • ServiceBusRuleManager.CreateRule
  • ServiceBusRuleManager.DeleteRule
  • ServiceBusRuleManager.GetRules

Дополнительные сведения см. в следующем разделе:

Метрика

Интеграция .NET AspireAzure Service Bus в настоящее время не поддерживает метрики по умолчанию из-за ограничений пакета SDK Azure для .NET. Если в будущем произойдут изменения, этот раздел будет обновлён, чтобы их отразить.

См. также