

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

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

Les didacticiels suivants vous montrent comment configurer et utiliser RabbitMQ sur Amazon MQ. Pour en savoir plus sur l'utilisation des bibliothèques client prises en charge dans une variété de langages de programmation tels que Node.js, Python, .NET, etc., consultez [Didacticiels RabbitMQ](https://www.rabbitmq.com/getstarted.html) du *Guide de démarrage RabbitMQ*.

**Topics**
+ [Modification des préférences d'agent](amazon-mq-rabbitmq-editing-broker-preferences.md)
+ [Utilisation de Python Pika avec Amazon MQ pour RabbitMQ](amazon-mq-rabbitmq-pika.md)
+ [Résolution de la synchronisation de la file d'attente mise en pause RabbitMQ](rabbitmq-queue-sync.md)
+ [Réduction du nombre de connexions et de canaux](reducing-connections-and-channels.md)
+ [Étape 2 : Connectez une application basée sur JVM à votre courtier](#rabbitmq-connect-jvm-application)
+ [Connect your Amazon MQ for RabbitMQ broker to Lambda](#rabbitmq-connect-to-lambda)
+ [Utilisation de l'authentification et de l'autorisation OAuth 2.0 pour Amazon MQ pour RabbitMQ](oauth-tutorial.md)
+ [Utilisation de l'authentification et de l'autorisation IAM pour Amazon MQ pour RabbitMQ](rabbitmq-iam-tutorial.md)
+ [Utilisation de l'authentification et de l'autorisation LDAP pour Amazon MQ pour RabbitMQ](rabbitmq-ldap-tutorial.md)
+ [Utilisation de l'authentification et de l'autorisation HTTP pour Amazon MQ pour RabbitMQ](rabbitmq-http-tutorial.md)
+ [Utilisation de l'authentification par certificat SSL pour Amazon MQ pour RabbitMQ](rabbitmq-ssl-tutorial.md)
+ [Utilisation de MTL pour l'AMQP et les points de terminaison de gestion](rabbitmq-mtls-tutorial.md)
+ [Connexion de votre application JMS](rabbitmq-tutorial-jms.md)

## Étape 2 : Connectez une application basée sur JVM à votre courtier
<a name="rabbitmq-connect-jvm-application"></a>

 Après avoir créé un agent RabbitMQ, vous pouvez y connecter votre application. Les exemples suivants montrent comment utiliser la [bibliothèque client Java RabbitMQ](https://www.rabbitmq.com/java-client.html) pour créer une connexion à votre agent, créer une file d'attente et envoyer un message. Vous pouvez vous connecter à des agents RabbitMQ à l'aide des bibliothèques client RabbitMQ prises en charge pour une variété de langages. Pour plus d'informations sur les bibliothèques clientes RabbitMQ prises en charge, voir Bibliothèques clientes [RabbitMQ](https://www.rabbitmq.com/devtools.html) et outils de développement. 

### Conditions préalables
<a name="rabbitmq-connect-application-prerequisites-getting-started"></a>

**Note**  
Les étapes préalables suivantes ne s'appliquent qu'aux agents RabbitMQ créés sans accès public. Si vous créez un agent avec accès public, vous pouvez les ignorer.

#### Activer les attributs du VPC
<a name="rabbitmq-connect-application-enable-vpc-attributes-getting-started"></a>

Pour vous assurer que votre agent est accessible dans votre VPC, vous devez activer les attributs `enableDnsHostnames` et `enableDnsSupport` du VPC. Pour plus d'informations, consultez [Prise en charge du DNS dans votre VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support) dans le *Guide de l'utilisateur Amazon VPC*.

#### Activer les connexions entrantes
<a name="rabbitmq-connect-application-allow-inbound-connections-getting-started"></a>

1. Connectez-vous à la [console Amazon MQ](https://console.aws.amazon.com/amazon-mq/).

1. Dans la liste des courtiers, choisissez le nom de votre courtier (par exemple, **MyBroker**).

1. Sur la **{{MyBroker}}**page, dans la section **Connexions**, notez les adresses et les ports de l'URL de la console Web du courtier et des protocoles au niveau du fil.

1. Dans la section **Details (Détails)**, sous **Security and network (Sécurité et réseau)**, choisissez le nom de votre groupe de sécurité ou ![](http://docs.aws.amazon.com/fr_fr/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-broker-details-link.png).

   La page **Groupes de sécurité** du tableau de bord EC2 est affichée.

1. Dans la liste des groupes de sécurité, choisissez votre groupe de sécurité.

1. Au bas de la page, choisissez **Entrant**, puis **Modifier**.

1. Dans la boîte de dialogue **Edit inbound rules (Modifier les règles entrantes)**, ajoutez une règle pour chaque URL ou point de terminaison pour qu'ils soient accessibles publiquement (l'exemple suivant montre comment procéder pour une console web d'agent).

   1. Choisissez **Add Rule** (Ajouter une règle).

   1. Pour **Type**, sélectionnez **Custom TCP (TCP personnalisé)**.

   1. Pour **Source**, laissez l'option **Custom (Personnalisée)** sélectionnée, puis tapez l'adresse IP du système qui doit pouvoir accéder à la console web (par exemple, `192.0.2.1`).

   1. Choisissez **Enregistrer**.

      Votre agent peut désormais accepter les connexions entrantes.

#### Ajout de dépendances Java
<a name="rabbitmq-connect-application-java-dependencies-getting-started"></a>

Si vous utilisez Apache Maven pour automatiser les builds, ajoutez la dépendance suivante à votre fichier `pom.xml`. Pour plus d'informations sur les fichiers de modèle d'objet de projet dans Apache Maven, [voir Présentation du 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 vous utilisez [Gradle](https://docs.gradle.org/current/userguide/userguide.html) pour automatiser les builds, déclarez la dépendance suivante.

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

#### Importer les classe `Connection` et `Channel`
<a name="rabbitmq-import-connections-and-channels"></a>

 Le client Java RabbitMQ utilise `com.rabbitmq.client` comme paquet de premier niveau, avec les classes d'API `Connection` et `Channel` représentant une connexion et un canal AMQP 0-9-1, respectivement. Importez les classe `Connection` et `Channel` avant de les utiliser, comme illustré dans l'exemple suivant. 

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

#### Créer un `ConnectionFactory` et se connecter à votre agent
<a name="rabbitmq-create-connection-factory-and-connect"></a>

Utilisez l'exemple suivant pour créer une instance de la classe `ConnectionFactory` avec les paramètres donnés. Utilisation de la méthode `setHost` pour configurer le point de terminaison de l'agent noté précédemment. Pour les connexions au niveau filaire `AMQPS`, utilisez le port `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();
```

#### Publier un message dans un échange
<a name="rabbitmq-publish-message"></a>

 Vous pouvez utiliser `Channel.basicPublish` pour publier des messages dans un échange. L'exemple suivant utilise la classe `Builder` AMQP pour créer un objet de propriétés de message avec le type de contenu `plain/text`. 

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

**Note**  
Notez que `BasicProperties` est une classe interne de la classe de support générée automatiquement, `AMQP`.

#### S'abonner à une file d'attente et recevoir un message
<a name="rabbitmq-subscribe-receive-message"></a>

Vous pouvez recevoir un message en vous abonnant à une file d'attente à l'aide de l'interface `Consumer`. Une fois abonné, les messages seront alors remis automatiquement dès leur arrivée.

La façon la plus simple d'implémenter un objet `Consumer` est d'utiliser la sous-classe `DefaultConsumer`. Un objet `DefaultConsumer` peut être transmis comme faisant partie d'un appel `basicConsume` pour configurer l'abonnement comme illustré dans l'exemple suivant.

```
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);
         }
     });
```

**Note**  
Parce que nous avons spécifié `autoAck = false`, il est nécessaire d'accuser réception des messages remis à `Consumer`, le plus commodément fait dans la méthode `handleDelivery`, comme illustré dans l'exemple.

#### Fermer votre connexion et se déconnecter de l'agent
<a name="rabbitmq-disconnect"></a>

Afin de vous déconnecter de votre agent RabbitMQ, fermez à la fois le canal et la connexion comme indiqué ci-dessous.

```
channel.close();
conn.close();
```

**Note**  
Pour plus d'informations sur l'utilisation de la bibliothèque cliente Java RabbitMQ, consultez le Guide de l'API client Java [RabbitMQ](https://www.rabbitmq.com/api-guide.html).

## Étape 3 : (Facultatif) Se connecter à une AWS Lambda fonction
<a name="rabbitmq-connect-to-lambda"></a>

 AWS Lambda peut se connecter à votre courtier Amazon MQ et en consommer les messages. Lorsque vous connectez un agent à Lambda, vous créez un [mappage de la source d'événement](https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html) qui lit les messages d'une file d'attente et appelle la fonction [de manière synchrone](https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html). Le mappage de la source d'événements que vous créez lit les messages de votre agent par lots et les convertit en une charge utile Lambda sous la forme d'un objet JSON. 

**Pour connecter votre agent à une fonction Lambda**

1. Ajoutez les autorisations de rôle IAM suivantes au [rôle d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) de votre fonction 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)
   + [journaux : CreateLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html)
   + [journaux : CreateLogStream](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html)
   + [journaux : PutLogEvents](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html)
   + [responsable des secrets : GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
**Note**  
Sans les autorisations IAM nécessaires, votre fonction ne sera pas en mesure de lire correctement les enregistrements des ressources Amazon MQ.

1.  (Facultatif) Si vous avez créé un agent sans accès public, vous devez effectuer l'une des opérations suivantes pour permettre à Lambda de se connecter à votre agent : 
   +  Configurez une passerelle NAT par sous-réseau public. Pour plus d'informations, consultez [Accès à Internet et aux services pour les fonctions connectées à un VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-internet) dans le *Guide du développeur AWS Lambda *. 
   + Créez une connexion entre votre Amazon Virtual Private Cloud (Amazon VPC) et Lambda à l'aide d'un point de terminaison VPC. Votre Amazon VPC doit également se connecter à AWS Security Token Service (AWS STS) et aux points de terminaison Secrets Manager. Pour plus d’informations, consultez [Configuration de points de terminaison de VPC d’interface pour Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc-endpoints.html) dans le *Guide du développeur AWS Lambda *. 

1.  [Configurez votre agent en tant que source d'événement](https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-eventsourcemapping) pour une fonction Lambda à l'aide de la AWS Management Console. Vous pouvez également utiliser la [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 commande. 

1.  Écrivez du code pour votre fonction Lambda pour traiter les messages de votre consommateur à partir de votre agent. La charge utile Lambda récupérée par votre mappage de source d'événement dépend du type de moteur de l'agent. Voici un exemple de charge utile Lambda pour une file d'attente Amazon MQ for RabbitMQ. 
**Note**  
 Dans l'exemple, `test` est le nom de la file d'attente et `/` est le nom de l'hôte virtuel par défaut. Lors de la réception de messages, la source d’événement répertorie les messages sous `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=="
         }
       ]
     }
   }
   ```

[https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html](https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html)