

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.

# Tutoriales de RabbitMQ
<a name="rabbitmq-on-amazon-mq"></a>

En los siguientes tutoriales, se muestra cómo configurar y utilizar RabbitMQ en Amazon MQ. Para obtener más información acerca de cómo trabajar con bibliotecas de cliente compatibles en distintos lenguajes de programación como Node.js, Python, .NET y otros, consulte el tema sobre [tutoriales de RabbitMQ](https://www.rabbitmq.com/getstarted.html) en la *Guía de introducción a RabbitMQ*.

**Topics**
+ [Edición de las preferencias del agente](amazon-mq-rabbitmq-editing-broker-preferences.md)
+ [Uso de Python Pika con Amazon MQ para RabbitMQ](amazon-mq-rabbitmq-pika.md)
+ [Resolver la sincronización de colas en pausa de RabbitMQ](rabbitmq-queue-sync.md)
+ [Reducir el número de conexiones y canales](reducing-connections-and-channels.md)
+ [Paso 2: Conectar al agente una aplicación basada en una JVM](#rabbitmq-connect-jvm-application)
+ [Connect your Amazon MQ for RabbitMQ broker to Lambda](#rabbitmq-connect-to-lambda)
+ [Uso de la autenticación y autorización de OAuth 2.0 para Amazon MQ para RabbitMQ](oauth-tutorial.md)
+ [Uso de la autenticación y autorización de IAM para Amazon MQ for RabbitMQ](rabbitmq-iam-tutorial.md)
+ [Uso de la autenticación y autorización LDAP para Amazon MQ for RabbitMQ](rabbitmq-ldap-tutorial.md)
+ [Uso de la autenticación y autorización HTTP para Amazon MQ for RabbitMQ](rabbitmq-http-tutorial.md)
+ [Uso de la autenticación con certificado SSL para Amazon MQ para RabbitMQ](rabbitmq-ssl-tutorial.md)
+ [Uso de mTLS para AMQP y puntos finales de administración](rabbitmq-mtls-tutorial.md)
+ [Conexión de la aplicación JMS](rabbitmq-tutorial-jms.md)

## Paso 2: Conectar al agente una aplicación basada en una JVM
<a name="rabbitmq-connect-jvm-application"></a>

 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](https://www.rabbitmq.com/java-client.html) 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 de las bibliotecas de cliente de RabbitMQ compatibles, consulte el tema sobre [bibliotecas de cliente de RabbitMQ y herramientas para desarrolladores](https://www.rabbitmq.com/devtools.html). 

### Requisitos previos
<a name="rabbitmq-connect-application-prerequisites-getting-started"></a>

**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
<a name="rabbitmq-connect-application-enable-vpc-attributes-getting-started"></a>

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](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support) en la *Guía del usuario de Amazon VPC*.

#### Habilitar las conexiones entrantes
<a name="rabbitmq-connect-application-allow-inbound-connections-getting-started"></a>

1. Inicie sesión en la [consola de Amazon MQ](https://console.aws.amazon.com/amazon-mq/).

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

1. En la ***MyBroker***pá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.

1. En la sección **Details** (Detalles), en **Security and network** (Seguridad y red), elija el nombre de su grupo de seguridad o ![\[Pencil icon indicating an edit or modification action.\]](http://docs.aws.amazon.com/es_es/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-broker-details-link.png).

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

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

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

1. 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)**.

   1. En **Type (Tipo)**, seleccione **Custom TCP (TCP personalizada)**.

   1. 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`).

   1. Seleccione **Save**.

      El agente ahora puede aceptar las conexiones entrantes.

#### Agregar dependencias de Java
<a name="rabbitmq-connect-application-java-dependencies-getting-started"></a>

Si está utilizando Apache Maven para automatizar compilaciones, agregue la siguiente dependencia a su archivo `pom.xml`. Para obtener más información de los archivos Project Object Model en Apache Maven, consulte el tema sobre [introducción a POM](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html).

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

Si utiliza [Gradle](https://docs.gradle.org/current/userguide/userguide.html) para automatizar compilaciones, declare la siguiente dependencia.

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

#### Importar clases `Connection` y `Channel`
<a name="rabbitmq-import-connections-and-channels"></a>

 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
<a name="rabbitmq-create-connection-factory-and-connect"></a>

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
<a name="rabbitmq-publish-message"></a>

 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
<a name="rabbitmq-subscribe-receive-message"></a>

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
<a name="rabbitmq-disconnect"></a>

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 del uso de la biblioteca de cliente de Java de RabbitMQ, consulte la [Guía de API de cliente de Java de RabbitMQ](https://www.rabbitmq.com/api-guide.html).

## Paso 3: (Opcional) Conectarse a una AWS Lambda función
<a name="rabbitmq-connect-to-lambda"></a>

 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](https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html) que lee mensajes de una cola e invoca la función [de forma sincrónica](https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html). 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](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) de su función Lambda.
   + [mq: DescribeBroker](https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers-broker-id.html#brokers-broker-id-http-methods)
   + [ec2: CreateNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)
   + [ec2: DeleteNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteNetworkInterface.html)
   + [ec2: DescribeNetworkInterfaces](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)
   + [ec2: DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html)
   + [ec2: DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html)
   + [ec2: DescribeVpcs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html)
   + [registros: CreateLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html)
   + [registros: CreateLogStream](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html)
   + [registros: PutLogEvents](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html)
   + [administrador de secretos: GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
**nota**  
Sin los permisos necesarios de IAM, su función no podrá leer correctamente los registros de los recursos de Amazon MQ.

1.  (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: 
   +  Puede configurar una gateway NAT para cada subred pública. Para obtener más información, consulte el tema sobre [acceso a Internet y a los servicios para funciones conectadas a la VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-internet) en la *AWS Lambda Guía para desarrolladores*. 
   + Cree una conexión entre Amazon Virtual Private Cloud (Amazon VPC) y Lambda a través de un punto de enlace de la VPC. Su Amazon VPC también debe conectarse a AWS Security Token Service (AWS STS) y a los puntos de conexión de Secrets Manager. Para obtener más información, consulte [Configuración de puntos de conexión de VPC de interfaz para Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc-endpoints.html) en la *AWS Lambda Guía para desarrolladores*. 

1.  [Configure el agente como origen de eventos](https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-eventsourcemapping) para una función Lambda a través de la Consola de administración de AWS. También puede usar el [https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html) AWS Command Line Interface comando. 

1.  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, el origen de eventos muestra los mensajes en`test::/`. 

   ```
   {
     "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 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 asignación de orígenes de eventos, consulte el tema sobre el [uso de Lambda con Amazon MQ](https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html) en la *AWS Lambda Guía para desarrolladores*.