Упражнение. Настройка приложений для отправки или получения сообщений через концентратор событий

Завершено

Теперь можно настраивать приложения для публикации и получения событий через концентратор событий.

В этом уроке вы настраиваете приложения для отправки или получения сообщений через концентратор событий. Одно приложение работает как отправитель сообщений (SimpleSend), а другое — как получатель (EventProcessorSample). Поскольку эти приложения написаны на Java, вы можете выполнять все действия по разработке, тестированию и управлению в браузере. Однако для любой другой платформы, например для .NET, необходимо использовать точно такую же конфигурацию. Приложения хранятся в репозитории GitHub.

Создание стандартной учетной записи хранения общего назначения

Приложение-получатель Java хранит сообщения в службе Хранилища BLOB-объектов Azure, для чего требуется учетная запись хранения. Создайте учетную запись хранения (общего назначения версии 2) с помощью команды storage account create. Мы определяем следующие параметры для этой команды:

Параметр Описание
name (обязательный) Имя вашей учетной записи.
resource-group (обязательный параметр) Владелец группы ресурсов — это группа ресурсов песочницы, которая уже определена как значение по умолчанию.
location (необязательный параметр) Регион уже определен как значение по умолчанию, но его можно включить, если вы хотите задать другой регион из расположения группы ресурсов по умолчанию.
sku Значение SKU по умолчанию учетной записи хранения Standard_RAGRS. Но в этом упражнении мы указываем это значение.

В предыдущем упражнении мы определили значения по умолчанию для группы ресурсов и расположения, поэтому можем опустить в команде эти параметры.

  1. В Azure Cloud Shell задайте переменной имя учетной записи хранения. Имя учетной записи хранения должно быть уникальным в пределах Azure и содержать от 3 до 24 цифр или строчных букв.

    STORAGE_NAME=storagename$RANDOM
    
  2. Выполните следующую команду, чтобы создать учетную запись хранения.

    az storage account create --name $STORAGE_NAME --sku Standard_RAGRS --encryption-service blob
    

    Совет

    Создание этой учетной записи хранения может занять некоторое время. Если создать учетную запись хранения не удалось, измените переменную среды и повторите попытку.

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

    az storage account keys list --account-name $STORAGE_NAME
    
  4. Два ключа, связанные с вашей учетной записью хранения, выводятся в формате JSON. Скопируйте и сохраните значение key1 для использования в будущем. Этот ключ необходим для доступа к учетной записи хранения.

  5. Выполните следующую команду, чтобы получить строку подключения для учетной записи хранения.

    az storage account show-connection-string -n $STORAGE_NAME
    
  6. Выходные данные содержат сведения о подключении для вашей учетной записи хранения. Скопируйте и сохраните значение connectionString. Должно отобразиться примерно следующее:

    "DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=storage_account_name;AccountKey=VZjXuMeuDqjCkT60xX6L5fmtXixYuY2wiPmsrXwYHIhwo736kSAUAj08XBockRZh7CZwYxuYBPe31hi8XfHlWw=="
    
  7. Создайте в учетной записи хранения контейнер с именем messages, используя следующую команду. Вставьте значение строки подключения (connectionString), которое вы скопировали на предыдущем шаге.

    az storage container create --name messages --connection-string "<connection string here>"
    

Клонирование репозитория центров событий GitHub

В Cloud Shell клонируйте репозиторий центров событий GitHub с gitпомощью . Исходные файлы для приложений, создаваемых в этом уроке, находятся в репозитории GitHub.

  1. Выполните следующие команды, чтобы перейти в корневой каталог Cloud Shell, и клонируйте этот репозиторий.

    cd ~
    git clone https://github.com/Azure/azure-event-hubs.git
    

Репозиторий клонируется в корневую папку.

Редактирование файла SimpleSend.java

В этом упражнении вы используете встроенный редактор Cloud Shell для изменения приложения SimpleSend. Необходимо добавить пространство имен Центров событий, имя концентратора событий, имя политики общего доступа и первичный ключ.

  1. Перейдите в папку SimpleSend.

    cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend/src/main/java/com/microsoft/azure/eventhubs/samples/SimpleSend
    
  2. Откройте редактор Cloud Shell в текущей папке.

    code .
    

    Файлы в текущей папке перечислены в меню слева, а пространство редактора справа отображает содержимое имени файла, указанного в строке заголовка.

  3. Если файл SimpleSend.java еще не открыт, откройте его, выбрав в списке файлов.

  4. В редакторе найдите и замените следующие строки в разделе "Подключение ionStringBuilder".

    • "Your Event Hubs namespace name" замените именем пространства имен для Центров событий;
    • "Your Event Hub" замените именем концентратора событий;
    • "Your policy name" замените значением RootManageSharedAccessKey;
    • "Your primary SAS key" замените значением ключа primaryKey для пространства имен Центров событий, который вы сохранили ранее;

    Если вы забыли эти значения, можно переключиться в окно терминала под редактором и выполнить echo команду, чтобы получить список переменных среды. Например:

    echo $NS_NAME
    echo $HUB_NAME
    echo $STORAGE_NAME
    

    Когда вы создаете пространство имен концентраторов событий, для вашего первичного ключа SAS создается 256-битный ключ SAS с именем RootManageSharedAccessKey. Он включает пару первичного и вторичного ключей, предоставляющих права на отправку, прослушивание и управление правами для пространства имен. Ранее в этом упражнении вы получили ключ с помощью команды Azure CLI; однако для поиска ключей и строк подключения можно также выбрать пространство имен концентраторов событий на портале Azure, а затем в меню Параметры выбрать Политики общего доступа. Теперь выберите имя политики RootManageSharedAccessKey, чтобы показать ключи политики SAS.

  5. Сохраните файл SimpleSend.java и закройте редактор.

    Совет

    Чтобы сохранить изменения, нажмите клавиши CTRL+S. Закройте редактор с помощью сочетания клавиш CTRL+X в Windows и Linux или CMD+S в macOS. В отличие от окна терминала Cloud Shell, редактор Cloud Shell использует стандартные для вашей ОС сочетания клавиш копирования и вставки. Кроме того, можно открыть меню редактора, нажав кнопку с многоточием (...) в правом верхнем углу, для использования дополнительных команд редактирования.

Использование Maven для сборки SimpleSend.java

Теперь вы создадите приложение Java, выполнив команды mvn .

  1. В Cloud Shell введите следующую команду, чтобы перейти в главную папку SimpleSend.

    cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend
    
  2. Выполните сборку приложения Java SimpleSend. Эта команда выполняет сборку приложения, используя сведения о подключении для вашего концентратора событий.

    mvn clean package -DskipTests
    

    Процесс сборки может занять несколько минут. Вы должны увидеть сообщение [INFO] BUILD SUCCESS, прежде чем продолжать работу.

    Build results for sender application.

Редактирование файла EventProcessorSample.java

Теперь вы настраиваете приложение приемника (также известного как подписчик или потребитель) для приема данных из концентратора событий.

Для приложения-получателя доступны два класса: EventHubReceiver и EventProcessorHost. EventProcessorHost основывается на EventHubReceiver, но предоставляет более простой программный интерфейс, чем EventHubReceiver. EventProcessorHost может автоматически распределять разделы сообщения между несколькими экземплярами EventProcessorHost в пределах одной учетной записи хранения.

В этой процедуре EventProcessorHost используется метод. Вы измените приложение EventProcessorSample, чтобы добавить следующие значения: пространство имен Центров событий, имя концентратора событий, имя политики общего доступа и первичный ключ, имя учетной записи хранения, строка подключения и имя контейнера.

  1. Перейдите в папку EventProcessorSample, используя следующую команду.

    cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample/src/main/java/com/microsoft/azure/eventhubs/samples/eventprocessorsample
    
  2. Откройте редактор Cloud Shell.

    code .
    
  3. Выберите файл EventProcessorSample.java.

  4. Средствами редактора найдите и замените следующие строки:

    • ----EventHubNamespaceName---- замените именем пространства имен для Центров событий;
    • ----EventHubName---- замените именем концентратора событий;
    • ----SharedAccessSignatureKeyName---- замените значением RootManageSharedAccessKey;
    • ----SharedAccessSignatureKey---- замените значением ключа primaryKey для пространства имен Центров событий, который вы сохранили ранее;
    • ----AzureStorageConnectionString---- замените строкой подключения к учетной записи хранения, которую вы сохранили ранее;
    • ----StorageContainerName---- замените значением messages;
    • ----HostNamePrefix---- замените именем учетной записи хранения.
  5. Сохраните файл EventProcessorSample.java с помощью меню "..." или с помощью сочетания клавиш (CTRL + S в Windows и Linux, Cmd + S в macOS).

  6. Закройте редактор.

Использование Maven для сборки EventProcessorSample.java

  1. Перейдите в главную папку EventProcessorSample, используя следующую команду.

    cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample
    
  2. Выполните сборку приложения Java SimpleSend с помощью следующей команды, чтобы убедиться, что приложение использует сведения о подключении для концентратора событий.

    mvn clean package -DskipTests
    

    Процесс сборки может занять несколько минут. Вы должны увидеть сообщение [INFO] BUILD SUCCESS, прежде чем продолжать работу.

    Build results for receiver application.

Запуск приложений отправителя и получателя

  1. Запустите приложение Java из командной строки, выполнив следующую java команду и указав jar-пакет. Запустите приложение SimpleSend с помощью следующей команды.

    cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend
    java -jar ./target/simplesend-1.0.0-jar-with-dependencies.jar
    
  2. Когда появится сообщение Отправка завершена, нажмите клавишу ВВОД.

    jar-with-dependencies.jar
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    2018-09-18T19:42:15.146Z: Send Complete...
    
  3. Запустите приложение EventProcessorSample, используя следующую команду.

    cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample
    java -jar ./target/eventprocessorsample-1.0.0-jar-with-dependencies.jar
    
  4. Когда прекратится вывод сообщений на консоль, нажмите клавишу ВВОД или сочетание клавиш CTRL+C, чтобы завершить программу.

    ...
    SAMPLE: Partition 0 checkpointing at 1064,19
    SAMPLE (3,1120,20): "Message 80"
    SAMPLE (3,1176,21): "Message 84"
    SAMPLE (3,1232,22): "Message 88"
    SAMPLE (3,1288,23): "Message 92"
    SAMPLE (3,1344,24): "Message 96"
    SAMPLE: Partition 3 checkpointing at 1344,24
    SAMPLE (2,1120,20): "Message 83"
    SAMPLE (2,1176,21): "Message 87"
    SAMPLE (2,1232,22): "Message 91"
    SAMPLE (2,1288,23): "Message 95"
    SAMPLE (2,1344,24): "Message 99"
    SAMPLE: Partition 2 checkpointing at 1344,24
    SAMPLE: Partition 1 batch size was 3 for host mystorageacct2018-46d60a17-7060-4b53-b0e0-cca70c970a47
    SAMPLE (0,1120,20): "Message 81"
    SAMPLE (0,1176,21): "Message 85"
    SAMPLE: Partition 0 batch size was 10 for host mystorageacct2018-46d60a17-7060-4b53-b0e0-cca70c970a47
    SAMPLE: Partition 0 got event batch
    SAMPLE (0,1232,22): "Message 89"
    SAMPLE (0,1288,23): "Message 93"
    SAMPLE (0,1344,24): "Message 97"
    SAMPLE: Partition 0 checkpointing at 1344,24
    SAMPLE: Partition 3 batch size was 8 for host mystorageacct2018-46d60a17-7060-4b53-b0e0-cca70c970a47
    SAMPLE: Partition 2 batch size was 9 for host mystorageacct2018-46d60a17-7060-4b53-b0e0-cca70c970a47
    SAMPLE: Partition 0 batch size was 3 for host mystorageacct2018-46d60a17-7060-4b53-b0e0-cca70c970a47
    

Итоги

В этом уроке вы настроили приложение отправителя, готовое к отправке сообщений в концентратор событий. Вы также настроили приложение-получатель, готовое к получению сообщений из концентратора событий.