Как мы можем получить событие из Azure event hub без имени контейнера для хранения, StorageAccountName и StorageAccountKey эти сведения

#c# #azure #azure-eventhub

#c# #azure #azure-eventhub

Вопрос:

Я новичок в платформе Azure, у меня есть только EventHubConnectionString и EventHubName, и у меня нет имени контейнера хранения, StorageAccountName и ключа учетной записи хранилища. Я хочу разработать одно приложение, которое получает события из event hub, но я не понимаю, как мне действовать без этой информации.Пожалуйста, помогите с этой проблемой.

Я перехожу по этой ссылке для справки Azure Event Hub.

Комментарии:

1. Имя учетной записи хранения и ключ находятся на вкладке «Ключи доступа» вашего экземпляра учетной записи хранения на портале azure.

2. Я голосую за закрытие этого вопроса как не по теме, потому что речь идет о поиске значений на веб-портале Azure, а не о программировании.

3. Вопрос очень актуальный и, на мой взгляд, не отклоняется от темы. Я полагаю, что вопрос в том, как я могу написать потребителя событий Azure Event Hub без использования Azure Storage .

Ответ №1:

Я не понимаю, как мне поступить с этой информацией

Похоже, что для использования Event Hub у вас должно быть что-то для управления контрольными точками. Большинство примеров и документации показывают использование хранилища Azure для хранения контрольных точек, которые автоматически создаются текущей базой кода .Net Azure SDK. В текущей документации на EventProcessorHost, похоже, не отображается ни один из конструкторов, для которого требуется не учетная запись хранилища, а пользовательский класс, который вы пишете, производный от ICheckpointManager.

Конструктор, который не документирован (на данный момент времени), выглядит следующим образом:

     //
    // Summary:
    //     Create a new host to process events from an Event Hub.
    //     This overload of the constructor allows maximum flexibility. This one allows
    //     the caller to specify the name of the processor host as well. The overload also
    //     allows the caller to provide their own lease and checkpoint managers to replace
    //     the built-in ones based on Azure Storage.
    //
    // Parameters:
    //   hostName:
    //     Name of the processor host. MUST BE UNIQUE. Strongly recommend including a Guid
    //     to ensure uniqueness.
    //
    //   eventHubPath:
    //     The name of the EventHub.
    //
    //   consumerGroupName:
    //     The name of the consumer group within the Event Hub.
    //
    //   eventHubConnectionString:
    //     Connection string for the Event Hub to receive from.
    //
    //   checkpointManager:
    //     Object implementing ICheckpointManager which handles partition checkpointing.
    //
    //   leaseManager:
    //     Object implementing ILeaseManager which handles leases for partitions.
    public EventProcessorHost(string hostName, string eventHubPath, string consumerGroupName, string eventHubConnectionString, ICheckpointManager checkpointManager, ILeaseManager leaseManager);
  

Комментарии:

1. спасибо, Эрик за эту информацию, поскольку я новичок в этой платформе, а также в C #, также я не знаю, как установить соединение с Azure Event hub для получения сообщения без информации о хранилище. Для меня было бы большим подспорьем, если бы вы предоставили полный код для установления соединения. Также предложите мне какую-нибудь ссылку для изучения этих концепций.

2. У меня нет примеров, но их там предостаточно. Что касается конкретного примера без Azure Storage, вот как это сделать, но я никогда не реализовывал это. Что касается ссылок, я настоятельно рекомендую google.com .

3. Спасибо, Эрик, я нашел инструмент, который делает что-то подобное, что я хочу, но я не знаю, как я получаю код для этого случая Azure Service Bus Explorer

Ответ №2:

Вам придется использовать пользовательский CheckpointManager для EventProcessorHost (EPH), если вы не хотите использовать диспетчер контрольных точек Azure по умолчанию. У Михаила Шилкова есть пример реализации SQL checkpointmanager.Пример SQLcheckpointManager

Комментарии:

1. первая предоставленная вами ссылка не приведет вас туда, куда следует из текста. Я думаю, что это может быть ошибкой. Пользовательский образец диспетчера контрольных точек, упомянутый во второй ссылке, очень полезен!

Ответ №3:

Вы можете использовать EventHubConsumerClient.ReadEventsAsync . Для меня это лучше, потому что я не хочу использовать хранилище больших двоичных объектов. Но время от времени я получаю Error reading event: EventHubsException(ConsumerDisconnected)

Ответ №4:

Обратитесь к документам:https://learn.microsoft.com/en-us/java/api/com.azure.messaging.eventhubs?view=azure-java-stable

Фрагмент кода :

 EventHubConsumerAsyncClient consumer = new EventHubClientBuilder()
         .connectionString(connectionStr,eventhubName)
         .consumerGroup(EventHubClientBuilder.DEFAULT_CONSUMER_GROUP_NAME)
         .buildAsyncConsumerClient();
// Receive data for partition "0"
 consumer.receiveFromPartition("0", EventPosition.latest()).subscribe(event -> {
        System.out.println("Event received : " event.getData().getBodyAsString());

      });