Azure Service Bus - темы, сообщения - с использованием .NET Core

Я пытаюсь использовать Azure Service Bus с .NET Core. Очевидно, на данный момент это отстой. Я пробовал следующие маршруты:

  • Официальный SDK: не работает с .NET Core
  • AMQP.Net Lite: нет (достойная) документация, нет API-интерфейсов управления вокруг создания/публикации и т.д. Только примеры служебной шины охватывают небольшой набор функциональных возможностей, и вам нужно иметь уже тему, и т.д.
  • Обертка сообщества вокруг AMQP.Net Lite, которая отражает Azure SDK (https://github.com/ppatierno/azuresblite): не работает с .NET Core

Затем я перешел к REST.

https://azure.microsoft.com/en-gb/documentation/articles/service-bus-brokered-tutorial-rest/ - это хороший старт (хотя поддержка сторонних разработчиков для .NET Core тоже не поддерживается, и по какой-то причине официальный SDK, похоже, не охватывает REST клиент - нет Swagger def, нет клиента AutoRest и т.д.). Хотя этот дрянной пример объединяет строки в XML без кодирования и охватывает небольшой набор функциональных возможностей.

Поэтому я решил искать документацию REST. Есть два раздела: "классический" REST и просто REST. Обычный старый REST не поддерживает отправку и получение сообщений (кажется, да?). Я ненавижу использовать более старую технологию с надписью "классика", если я не могу понять, что это такое - конечно, документы здесь не помогают. Он также использует XML и ATOM, а не JSON. Я понятия не имею, почему.

Бонус: образец, связанный в документации для REST API, например. от https://msdn.microsoft.com/en-US/library/azure/hh780786.aspx, больше не существует.

Существуют ли какие-либо жизнеспособные подходы, которые кому-либо удалось использовать для чтения/записи сообщений по темам/из подписки с Azure Service Bus и .NET Core?

Ответ 1

Тем не менее нет достаточной поддержки для реализации OnMessage, которая, я думаю, самая важная вещь в ServiceBus,.Net Core версии ServiceBus был выпущен несколько дней назад.

Ответ 2

К сожалению, на момент написания этой статьи ваши единственные варианты использования служебной шины - либо бросить свой собственный, если вы хотите использовать Azure Storage, либо альтернативную стороннюю библиотеку, такую ​​как Hangfire, которая имеет своего рода -queue в виде хранилища серверов Sql.

Ответ 3

Поддержка Azure Service Bus в .Net Core становится все лучше и лучше. Для него есть специальный пакет nuget: Microsoft.Azure.ServiceBus. На данный момент (март 2018 года) он поддерживает большинство сценариев, которые могут вам понадобиться, хотя есть некоторые пробелы, например:

  • прием сообщений в пакетах
  • проверка наличия темы/очереди/подписки
  • создание новой темы/очереди/подписки из кода

Что касается поддержки OnMessage для приема сообщений, появляется новый метод: RegisterMessageHandler, который делает то же самое.

Вот пример кода, как его можно использовать:

public class MessageReceiver
{
    private const string ServiceBusConnectionString = "Endpoint=sb://bialecki.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[privateKey]";

    public void Receive()
    {
        var subscriptionClient = new SubscriptionClient(ServiceBusConnectionString, "productRatingUpdates", "sampleSubscription");

        try
        {
            subscriptionClient.RegisterMessageHandler(
                async (message, token) =>
                {
                    var messageJson = Encoding.UTF8.GetString(message.Body);
                    var updateMessage = JsonConvert.DeserializeObject<ProductRatingUpdateMessage>(messageJson);

                    Console.WriteLine($"Received message with productId: {updateMessage.ProductId}");

                    await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
                },
                new MessageHandlerOptions(async args => Console.WriteLine(args.Exception))
                { MaxConcurrentCalls = 1, AutoComplete = false });
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception: " + e.Message);
        }
    }
}

Полную информацию смотрите в моих сообщениях в блоге:

Отправка сообщений в .Net Core: http://www.michalbialecki.com/2017/12/21/sending-a-azure-service-bus-message-in-asp-net-core/

Получение сообщений в .Net Core: http://www.michalbialecki.com/2018/02/28/receiving-messages-azure-service-bus-net-core/