Ejercicio: Configurar aplicaciones para enviar o recibir mensajes mediante un centro de eventos

Completado

Ya está listo para configurar las aplicaciones de publicador y consumidor para el centro de eventos.

En esta unidad, configurará aplicaciones para enviar o recibir mensajes mediante el centro de eventos. Una aplicación actúa como el remitente del mensaje (SimpleSend) y la otra como el receptor (EventProcessorSample). Como estas aplicaciones están escritas en Java, puede realizar todas las tareas de desarrollo, pruebas y administración en el explorador. Pero se debe usar la misma configuración para cada plataforma, como .NET. Las aplicaciones se almacenan en un repositorio de GitHub.

Creación de una cuenta de almacenamiento estándar de uso general

La aplicación receptora de Java almacena mensajes en Azure Blob Storage, que necesita una cuenta de almacenamiento. Para crear una cuenta de almacenamiento (V2 de uso general), use el comando storage account create. Definimos los parámetros siguientes para este comando:

Parámetro Descripción
Atributo name (obligatorio) Un nombre para la cuenta de almacenamiento.
resource-group (obligatorio) El propietario del grupo de recursos es el grupo de recursos del espacio aislado, que ya se ha definido como un valor predeterminado.
location (opcional) La región ya se ha definido como un valor predeterminado, pero puede incluirla si quiere establecer una región diferente de la ubicación predeterminada del grupo de recursos.
sku El valor de SKU predeterminado de la cuenta de almacenamiento es Standard_RAGRS. Pero en este ejercicio, se especifica ese valor.

En el ejercicio anterior se han definido valores predeterminados para el grupo de recursos y la ubicación, por lo que esos parámetros se pueden omitir en el comando.

  1. En Azure Cloud Shell, establezca el nombre de la cuenta de almacenamiento en una variable. Un nombre de cuenta de almacenamiento debe ser único en Azure y debe contener entre 3 y 24 números o letras minúsculas.

    STORAGE_NAME=storagename$RANDOM
    
  2. Ejecute el comando siguiente para crear la cuenta de almacenamiento.

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

    Sugerencia

    Esta cuenta de almacenamiento puede tardar tiempo en crearse. Si se produce un error en la creación de la cuenta de almacenamiento, cambie la variable de entorno y vuelva a intentarlo.

  3. Ejecute el comando siguiente para obtener las claves de acceso asociadas con la cuenta de almacenamiento.

    az storage account keys list --account-name $STORAGE_NAME
    
  4. Dos claves asociadas a la cuenta de almacenamiento se representan en formato JSON. Copie y guarde el valor de key1 para usarlo después. Necesitará esta clave para acceder a la cuenta de almacenamiento.

  5. Ejecute el comando siguiente para obtener la cadena de conexión de la cuenta de almacenamiento.

    az storage account show-connection-string -n $STORAGE_NAME
    
  6. La salida contiene los detalles de conexión de la cuenta de almacenamiento. Copie y guarde el valor de valor de connectionString. Debe tener el siguiente aspecto:

    "DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=storage_account_name;AccountKey=VZjXuMeuDqjCkT60xX6L5fmtXixYuY2wiPmsrXwYHIhwo736kSAUAj08XBockRZh7CZwYxuYBPe31hi8XfHlWw=="
    
  7. Ejecute el comando siguiente para crear un contenedor llamado messages en la cuenta de almacenamiento. Use el valor connectionString que ha copiado en el paso anterior.

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

Clonación del repositorio de GitHub de Event Hubs

En Cloud Shell, clone el repositorio de GitHub de Event Hubs con git. Los archivos de origen de las aplicaciones que va a compilar en esta unidad se encuentran en un repositorio de GitHub.

  1. Ejecute los siguientes comandos para asegurarse de que está en el directorio principal de Cloud Shell y luego clone este repositorio.

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

El repositorio se clona a la carpeta particular.

Edición de SimpleSend.java

En este ejercicio, usará el editor integrado de Cloud Shell para modificar la aplicación SimpleSend. Debe agregar el espacio de nombres de Event Hubs, el nombre del centro de eventos, el nombre de la directiva de acceso compartido y la clave principal.

  1. Cambie a la carpeta SimpleSend.

    cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend/src/main/java/com/microsoft/azure/eventhubs/samples/SimpleSend
    
  2. Abra el editor de Cloud Shell en la carpeta actual.

    code .
    

    Los archivos de la carpeta actual se muestran en el menú de la izquierda, y en el espacio del editor del lado derecho se muestra el contenido del nombre de archivo que aparece en el título.

  3. Si todavía no está abierto, seleccione SimpleSend.java en la lista de archivos para abrirlo.

  4. En el editor, busque y reemplace las cadenas siguientes en `ConnectionStringBuilder``:

    • "Your Event Hubs namespace name" por el nombre del espacio de nombres de Event Hubs.
    • "Your Event Hub" por el nombre del centro de eventos.
    • "Your policy name" por RootManageSharedAccessKey.
    • "Your primary SAS key" por el valor de la clave primaryKey del espacio de nombres para Event Hubs que guardó anteriormente.

    Si olvida estos valores, puede cambiar a la ventana del terminal situada debajo del editor para ejecutar el comando echo y enumerar las variables de entorno. Por ejemplo:

    echo $NS_NAME
    echo $HUB_NAME
    echo $STORAGE_NAME
    

    Para la clave SAS principal, cuando crea un espacio de nombres de Event Hubs, se crea una clave SAS de 256 bits llamada RootManageSharedAccessKey e incluye las claves principal y secundaria que conceden al espacio de nombres derechos para enviar, escuchar y administrar. Anteriormente en este ejercicio, ha obtenido la clave mediante la ejecución de un comando de la CLI de Azure; pero también puede buscar las claves y las cadenas de conexión si selecciona el espacio de nombres de Event Hubs en Azure Portal y, después, en el menú debajo de Configuración, selecciona Directivas de acceso compartido; ahora seleccione el nombre de directiva RootManageSharedAccessKey para mostrar las claves de directiva de SAS.

  5. Guarde el archivo SimpleSend.java y cierre el editor.

    Sugerencia

    Para guardar las modificaciones, presione Ctrl+S. Para salir del editor, presione Ctrl+X en Windows y Linux, o Cmd+S en macOS. A diferencia de la ventana de terminal de Cloud Shell, el editor de Cloud Shell usa métodos abreviados de teclado de copiar y pegar típicos para el sistema operativo. Como alternativa, puede abrir el menú del editor si selecciona los puntos suspensivos (...) en la esquina superior derecha para obtener comandos de edición adicionales.

Uso de Maven para compilar SimpleSend.java

Ahora compilará la aplicación Java mediante la ejecución de comandos mvn.

  1. En Cloud Shell, escriba el comando siguiente para ir a la carpeta SimpleSend principal.

    cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend
    
  2. Compile la aplicación SimpleSend de Java. Este comando compila la aplicación con los detalles de conexión del centro de eventos.

    mvn clean package -DskipTests
    

    El proceso de compilación puede tardar varios minutos en completarse. Asegúrese de ver el mensaje [INFO] BUILD SUCCESS antes de continuar.

    Build results for sender application.

Edición de EventProcessorSample.java

Ahora configure una aplicación receptora (también conocida como un suscriptor o consumidor) para ingerir datos del centro de eventos.

Hay dos clases disponibles para la aplicación receptora: EventHubReceiver y EventProcessorHost. EventProcessorHost se basa en EventHubReceiver, pero proporciona una interfaz programática más sencilla que EventHubReceiver. EventProcessorHost puede distribuir automáticamente particiones de mensaje en varias instancias de EventProcessorHost con la misma cuenta de almacenamiento.

En este procedimiento, se usa el método EventProcessorHost. Edite la aplicación EventProcessorSample para agregar los siguientes valores: El espacio de nombres de Event Hubs, el nombre del centro de eventos, el nombre de la directiva de acceso compartido y la clave principal, el nombre de la cuenta de almacenamiento, la cadena de conexión y el nombre del contenedor.

  1. Ejecute el comando siguiente para cambiar a la carpeta EventProcessorSample.

    cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample/src/main/java/com/microsoft/azure/eventhubs/samples/eventprocessorsample
    
  2. Abra el editor de Cloud Shell.

    code .
    
  3. Seleccione el archivo EventProcessorSample.java.

  4. Busque y reemplace las cadenas siguientes en el editor:

    • ----EventHubNamespaceName---- por el nombre del espacio de nombres de Event Hubs.
    • ----EventHubName---- por el nombre del centro de eventos.
    • ----SharedAccessSignatureKeyName---- por RootManageSharedAccessKey.
    • ----SharedAccessSignatureKey---- por el valor de la clave primaryKey del espacio de nombres para Event Hubs que guardó anteriormente.
    • ----AzureStorageConnectionString---- por la cadena de conexión de la cuenta de almacenamiento que guardó anteriormente.
    • ----StorageContainerName---- por messages.
    • ----HostNamePrefix---- por el nombre de la cuenta de almacenamiento.
  5. Guarde EventProcessorSample.java con el menú "..." o la combinación de teclas (Ctrl+S en Windows y Linux, Cmd+S en macOS).

  6. Cierre el editor.

Uso de Maven para compilar EventProcessorSample.java

  1. Ejecute el comando siguiente para cambiar a la carpeta EventProcessorSample principal.

    cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample
    
  2. Compile la aplicación SimpleSend de Java mediante la ejecución del siguiente comando para asegurarse de que la aplicación usa los detalles de conexión del centro de eventos.

    mvn clean package -DskipTests
    

    El proceso de compilación puede tardar varios minutos en completarse. Asegúrese de que ve un mensaje [INFO] BUILD SUCCESS antes de continuar.

    Build results for receiver application.

Inicio de las aplicaciones remitente y receptora

  1. Ejecute la aplicación Java desde la línea de comandos mediante el comando java siguiente y especifique un paquete .jar. Ejecute los siguientes comandos para iniciar la aplicación SimpleSend.

    cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend
    java -jar ./target/simplesend-1.0.0-jar-with-dependencies.jar
    
  2. Cuando vea Send Complete... (Envío completo...), presione Entrar.

    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. Ejecute el comando siguiente para iniciar la aplicación EventProcessorSample.

    cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample
    java -jar ./target/eventprocessorsample-1.0.0-jar-with-dependencies.jar
    
  4. Cuando los mensajes dejen de aparecer en la consola, presione Entrar o CTRL+C para finalizar el programa.

    ...
    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
    

Resumen

En esta unidad, ha configurado una aplicación remitente lista para enviar mensajes al centro de eventos. También ha configurado una aplicación receptora lista para recibir mensajes del centro de eventos.