Cómo crear un agente de RabbitMQ y conectarse a él - Amazon MQ

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cómo crear un agente de RabbitMQ y conectarse a él

Un agente es un entorno de agente de mensajes que se ejecuta en Amazon MQ. Es el componente básico de Amazon MQ. La descripción combinada de la instancia del agente clase (m5, t3) y tamaño (large, micro) es un tipo de instancias del agente (por ejemplo, mq.m5.large).

Paso 1: Crear un agente de RabbitMQ

La primera tarea, y la más habitual, en Amazon MQ es la creación de un agente. El siguiente ejemplo muestra cómo se puede utilizar AWS Management Console para crear un bróker básico.

  1. Inicie sesión en la consola de Amazon MQ.

  2. En la página Select broker engine (Seleccionar motor del agente), elija RabbitMQ y, luego, Next (Siguiente).

  3. En la página Select deployment mode (Seleccionar modo de implementación), elija el modo de implementación, por ejemplo, Cluster deployment (Implementación de clúster) y, luego, elija Next (Siguiente).

    • Un agente de una sola instancia está compuesto por un agente en una zona de disponibilidad situada detrás de un Network Load Balancer (NLB). El agente se comunica con su aplicación y con un volumen de almacenamiento de Amazon EBS. Para obtener más información, consulte Agente de una sola instancia.

    • Una Implementación de clúster de RabbitMQ para alta disponibilidad es una agrupación lógica de tres nodos de agente de RabbitMQ situados detrás de un Network Load Balancer, cada uno de los cuales comparte usuarios, colas y un estado distribuido entre varias zonas de disponibilidad (AZ). Para obtener más información, consulte Implementación de clúster para alta disponibilidad.

  4. En la página Configure settings (Configurar ajustes), sección Details (Detalles), siga estos pasos:

    1. Ingrese el nombre del agente.

      importante

      No agregue información de identificación personal (PII) ni ninguna otra información confidencial en los nombres de agente. Otros AWS servicios, incluidos los CloudWatch registros, pueden acceder a los nombres de los corredores. Los nombres de agente no están diseñados para usarse con información privada o confidencial.

    2. Elija el tipo de instancias del agente (por ejemplo, mq.m5.large). Para obtener más información, consulte Broker instance types.

    nota

    La sección Configuración adicional proporciona opciones para habilitar CloudWatch los registros y configurar el acceso a la red para su corredor. Si crea un agente privado de RabbitMQ sin accesibilidad pública, debe seleccionar una Virtual Private Cloud (VPC) y configurar un grupo de seguridad para acceder a su agente.

  5. En la página Configure settings (Configurar ajustes), sección RabbitMQ access (Acceso a RabbitMQ), proporcione un nombre de usuario y una contraseña. Las siguientes restricciones se aplican a las credenciales de inicio de sesión de agente:

    • El nombre de usuario solo puede contener caracteres alfanuméricos, guiones, puntos y guiones bajos (- . _). Este valor no debe contener ningún carácter de tilde (~). Amazon MQ prohíbe utilizar guest como nombre de usuario.

    • Esta contraseña debe tener 12 caracteres como mínimo, debe contener al menos 4 caracteres únicos y no puede incluir comas, dos puntos ni signos de igual (,:=).

    importante

    No agregue información de identificación personal (PII) ni ninguna otra información confidencial en los nombres de usuario de agente. Otros AWS servicios, incluidos CloudWatch los registros, pueden acceder a los nombres de usuario de los corredores. Los nombres de usuario de agente no están diseñados para usarse con información privada o confidencial.

  6. Elija Siguiente.

  7. En la página Review and create (Revisar y crear), puede revisar las opciones que seleccionó y modificarlas si es necesario.

  8. Elija Create broker (Crear agente).

    Mientras Amazon MQ crea su agente, muestra el estado Creation in progress (Creación en curso).

    El proceso de creación del agente de tarda unos 15 minutos.

    Cuando el agente se crea correctamente, Amazon MQ muestra el estado Running (En ejecución).

  9. Elige. MyBroker

    En la MyBrokerpágina, en la sección Connect, anote la URL de la consola web RabbitMQ de su corredor, por ejemplo:

    https://b-c8349341-ec91-4a78-ad9c-a57f23f235bb.mq.us-west-2.amazonaws.com

    Además, anote el punto de enlace de Secure-AMQP. A continuación se muestra un ejemplo de un punto de enlace amqps que expone al puerto de agente de escucha 5671.

    amqps://b-c8349341-ec91-4a78-ad9c-a57f23f235bb.mq.us-west-2.amazonaws.com:5671

Paso 2: Conectar una aplicación basada en JVM con el agente

Después de crear un agente de RabbitMQ, puede conectar su aplicación con él. Los siguientes ejemplos muestran cómo puede utilizar la biblioteca de cliente de Java de RabbitMQ para crear una conexión con su agente, crear una cola y enviar un mensaje. Puede conectarse con agentes de RabbitMQ mediante bibliotecas de cliente de RabbitMQ compatibles para varios idiomas. Para obtener más información acerca de las bibliotecas de cliente de RabbitMQ compatibles, consulte el tema sobre bibliotecas de cliente de RabbitMQ y herramientas para desarrolladores.

Requisitos previos

nota

Los siguientes requisitos previos solo se aplican a los agentes de RabbitMQ que se crean sin accesibilidad pública. Si está creando un agente con accesibilidad pública, puede omitirlos.

Habilitar atributos de VPC

Para asegurarse de poder acceder a su agente dentro de su VPC, debe habilitar los atributos enableDnsHostnames y enableDnsSupport de VPC. Para obtener más información, consulte el tema sobre soporte de DNS en su VPC en la Guía del usuario de Amazon VPC.

Habilitar las conexiones entrantes

  1. Inicie sesión en la consola de Amazon MQ.

  2. En la lista de corredores, elija el nombre de su corredor (por ejemplo,). MyBroker

  3. En la MyBrokerpágina, en la sección Conexiones, anote las direcciones y los puertos de la URL de la consola web del bróker y de los protocolos a nivel de cable.

  4. En la sección Details (Detalles), en Security and network (Seguridad y red), elija el nombre de su grupo de seguridad o .

    Aparecerá la página Security Groups (Grupos de seguridad) del panel de EC2.

  5. En la lista de grupos de seguridad, elija el grupo de seguridad.

  6. En la parte inferior de la página, elija Inbound (Entrante) y, a continuación, Edit (Editar).

  7. En el cuadro de diálogo Edit inbound rules (Editar reglas entrantes), agregue una regla para cada URL o punto de enlace que desee que sea accesible públicamente (en el ejemplo a continuación se muestra cómo hacerlo para una consola web de agente).

    1. Seleccione Add Rule (Agregar regla).

    2. En Type (Tipo), seleccione Custom TCP (TCP personalizada).

    3. Para Source (Fuente), deje seleccionada la opción Custom (Personalizada) y, luego, escriba la dirección IP del sistema que desea que pueda acceder a la consola web (por ejemplo, 192.0.2.1).

    4. Seleccione Guardar.

      El agente ahora puede aceptar las conexiones entrantes.

Agregar dependencias de Java

Si está utilizando Apache Maven para automatizar compilaciones, agregue la siguiente dependencia a su archivo pom.xml. Para obtener más información acerca de los archivos Project Object Model en Apache Maven, consulte el tema sobre introducción a POM.

<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.9.0</version> </dependency>

Si utiliza Gradle para automatizar compilaciones, declare la siguiente dependencia.

dependencies { compile 'com.rabbitmq:amqp-client:5.9.0' }

Importar clases Connection y Channel

El cliente Java de RabbitMQ utiliza com.rabbitmq.client como su paquete de nivel superior, y las clases de API Connection y Channel representan una conexión AMQP 0-9-1 y un canal, respectivamente. Importe las clases Connection y Channel antes de usarlas, como se muestra en el ejemplo a continuación.

import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel;

Crear un ConnectionFactory y conectarlo con su agente

Utilice el siguiente ejemplo para crear una instancia de la clase ConnectionFactory con los parámetros dados. Use el método setHost para configurar el punto de enlace del agente que anotó antes. Para conexiones de nivel de cable AMQPS, utilice el puerto 5671.

ConnectionFactory factory = new ConnectionFactory(); factory.setUsername(username); factory.setPassword(password); //Replace the URL with your information factory.setHost("b-c8352341-ec91-4a78-ad9c-a43f23d325bb.mq.us-west-2.amazonaws.com"); factory.setPort(5671); // Allows client to establish a connection over TLS factory.useSslProtocol(); // Create a connection Connection conn = factory.newConnection(); // Create a channel Channel channel = conn.createChannel();

Publicar un mensaje en un intercambio

Puede usar Channel.basicPublish para publicar mensajes en un intercambio. El siguiente ejemplo utiliza la clase Builder de AMQP para compilar un objeto de propiedades de mensaje con tipo de contenido plain/text.

byte[] messageBodyBytes = "Hello, world!".getBytes(); channel.basicPublish(exchangeName, routingKey, new AMQP.BasicProperties.Builder() .contentType("text/plain") .userId("userId") .build(), messageBodyBytes);
nota

Tenga en cuenta que BasicProperties es una clase interna de la clase titular generada automáticamente, que es AMQP.

Suscribirse a una cola y recibir un mensaje

Para recibir un mensaje, puede suscribirse a una cola a través de la interfaz Consumer. Una vez suscrito, los mensajes se entregarán automáticamente a medida que lleguen.

La forma más sencilla de implementar un Consumer es usar la subclase DefaultConsumer. Se puede pasar un objeto DefaultConsumer como parte de una ejecución basicConsume para configurar la suscripción como se muestra en el ejemplo a continuación.

boolean autoAck = false; channel.basicConsume(queueName, autoAck, "myConsumerTag", new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String routingKey = envelope.getRoutingKey(); String contentType = properties.getContentType(); long deliveryTag = envelope.getDeliveryTag(); // (process the message components here ...) channel.basicAck(deliveryTag, false); } });
nota

Dado que especificamos autoAck = false, es necesario reconocer los mensajes que se entregaron al Consumer, preferentemente a través del método handleDelivery, como se muestra en el ejemplo.

Cerrar la conexión y desconectarse del agente

Para desconectarse del agente de RabbitMQ, cierre el canal y la conexión como se muestra a continuación.

channel.close(); conn.close();
nota

Para obtener más información acerca del uso de la biblioteca de cliente de Java de RabbitMQ, consulte la Guía de API de cliente de Java de RabbitMQ.

Paso 3: (opcional) conectarse a una función AWS Lambda

AWS Lambda puede conectarse a su agente de Amazon MQ y consumirlos. Cuando conecta un agente a Lambda, crea un mapeo de origen de eventos que lee mensajes de una cola e invoca la función de forma sincrónica. El mapeo de origen de eventos que crea lee los mensajes de su agente en lotes y los convierte en una carga de Lambda en forma de objeto JSON.

Conectar a su agente con una función Lambda
  1. Agregue los siguientes permisos de roles de IAM al rol de ejecución de su función Lambda.

    nota

    Sin los permisos necesarios de IAM, su función no podrá leer correctamente los registros de los recursos de Amazon MQ.

  2. (Opcional) Si ha creado un agente sin accesibilidad pública, debe realizar una de las siguientes acciones para permitir que Lambda se conecte con su agente:

  3. Configure el agente como origen de eventos para una función Lambda a través de la AWS Management Console. También puede usar el create-event-source-mapping AWS Command Line Interface comando.

  4. Escriba algún código para que su función Lambda procese los mensajes de lo consumido desde su agente. La carga de Lambda que recupere el mapeo de origen de eventos depende del tipo de motor del agente. A continuación, se muestra un ejemplo de una carga de Lambda para una cola de RabbitMQ en Amazon MQ.

    nota

    En el ejemplo, test es el nombre de la cola y / es el nombre del anfitrión virtual predeterminado. Al recibir mensajes, la fuente del evento muestra los mensajes entest::/.

    { "eventSource": "aws:rmq", "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", "rmqMessagesByQueue": { "test::/": [ { "basicProperties": { "contentType": "text/plain", "contentEncoding": null, "headers": { "header1": { "bytes": [ 118, 97, 108, 117, 101, 49 ] }, "header2": { "bytes": [ 118, 97, 108, 117, 101, 50 ] }, "numberInHeader": 10 } "deliveryMode": 1, "priority": 34, "correlationId": null, "replyTo": null, "expiration": "60000", "messageId": null, "timestamp": "Jan 1, 1970, 12:33:41 AM", "type": null, "userId": "AIDACKCEVSQ6C2EXAMPLE", "appId": null, "clusterId": null, "bodySize": 80 }, "redelivered": false, "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==" } ] } }

Para obtener más información acerca de cómo conectar Amazon MQ a Lambda, las opciones que admite Lambda para un origen de eventos de Amazon MQ y los errores de mapeo de origen de eventos, consulte el tema sobre el uso de Lambda con Amazon MQ en la AWS Lambda Guía para desarrolladores.

Paso 4: Eliminar su agente

Si no utilizas un agente de Amazon MQ (y no tienes previsto utilizarlo en un futuro próximo), se recomienda eliminarlo de Amazon MQ para reducir tus costes. AWS

El siguiente ejemplo muestra cómo eliminar un agente a través de la AWS Management Console.

  1. Inicie sesión en la consola de Amazon MQ.

  2. En la lista de corredores, seleccione su agente (por ejemplo MyBroker) y, a continuación, elija Eliminar.

  3. ¿En la opción Eliminar MyBroker? cuadro de diálogo, escriba delete y, a continuación, elija Eliminar.

    El proceso de eliminación de un agente tarda unos 5 minutos.

Siguientes pasos

Ahora que ha creado un agente, conectado una aplicación a este y enviado y recibido un mensaje, es posible que quiera intentar lo siguiente:

También puede consultar las prácticas recomendadas de Amazon MQ y las API de REST de Amazon MQ antes de planificar la migración a Amazon MQ.