Ошибка при регистрации EventProcessorHost

Я пытаюсь использовать EventProcessorHost для получения сообщений от EventHub в JAVA. Выполнены шаги, которые приведены здесь1 и здесь2, но когда я запускаю код, я получаю ошибку ниже..

Registering host named <name>

Failure while registering: java.util.concurrent.ExecutionException: com.microsoft.azure.storage.StorageException: The client could not finish the operation within specified maximum execution timeout.
    Press enter to stop

Больше деталей:

  1. Создана новая учетная запись хранения, как упомянуто в блоге, а также создан BLOB-объект.

  2. Класс EventProcessor и класс ErrorNotificationHandler точно такие же, как указано в документах Microsoft.

  3. Код для регистрации звонков, как показано ниже...

    final String consumerGroupName = "test";
    final String namespaceName = "--namespace--";
    final String eventHubName = "--eventhub name --";
    final String sasKeyName = "--saskey name--";
    final String sasKey = "--sas-key";
    final String containerName = "--container name --";
    final String storageAccountName = "--storage account name --";
    final String storageAccountKey = "--storage -- account key--";
    final String connectionString = "--eventhub connection string copied from azure portal --";
    final String storageConString = "--storage connection string copied from azure portal --";
    
        EventProcessorHost host = new EventProcessorHost(
        namespaceName, // Also tried with full name <namespace name>.servicebus.windows.net
        eventHubName,
        consumerGroupName,
        connectionString,
        storageConString,
        containerName
        //        "<blobprefix>" Also tried with blob prefix
        );
    
        System.out.println("Registering host named " + host.getHostName());
        EventProcessorOptions options = new EventProcessorOptions();
        options.setReceiveTimeOut(Duration.ofMinutes(12 L));
        options.setExceptionNotification(new ErrorNotificationHandler());
    
        try {
    
        host.registerEventProcessor(EventProcessor.class, options).get(15, TimeUnit.MINUTES);
    
        } catch (Exception e) {
        System.out.print("Failure while registering: ");
        if (e instanceof ExecutionException) {
        Throwable inner = e.getCause();
        System.out.println(inner.toString());
        } else {
        System.out.println(e.toString());
        }
        }

Примечание. Блог не поддерживает конструктор EventProcessorHost.

В сети искал ошибку, и я смог найти увеличение тайм-аута для хранилища, но не уверен, как я могу доказать конкретный тайм-аут для хранилища в EventProcessorHost. Любая помощь приветствуется.

1 ответ

Я следовал за официальным документом, чтобы получать сообщения от концентратора событий, и он хорошо работает для меня.

введите описание изображения здесь

Сообщения были сохранены в хранилище BLOB-объектов Azure, которое я настроил.

введите описание изображения здесь

Согласно вашему описанию, исключение тайм-аута по-прежнему происходит, даже если вы установите для параметра ReceiveTimeOut значение 12 минут в EventProcessorOptions. По моему опыту, даже если сообщения принимаются одно за другим, это не может занять 12 минут. И мы обычно не можем установить тайм-аут в нашем приложении. Поэтому я думаю, что ошибка больше не от уровня SDK. Это может быть проблема сетевой среды.

Как я знаю, клиент отправки сообщений концентратора событий использует HTTP protocol и не будет заблокирован брандмауэром. Клиент приема сообщений EPH использует протокол AMQP, который по существу TCP protocol и будет ограничен настройками прокси-сервера или брандмауэра. Я предполагаю, что ваш Eph-клиент не имеет связи с концентратором событий.

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

Любое беспокойство, пожалуйста, дайте мне знать.

Другие вопросы по тегам