Didacticiels RabbitMQ - Amazon MQ

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

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 du Guide de démarrage RabbitMQ.

Étape 2 : Connectez une application basée sur JVM à votre courtier

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 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 de plus amples informations sur les bibliothèques client RabbitMQ prises en charge, consultez Bibliothèques client et outils de développement RabbitMQ.

Prérequis

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

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 dans le Guide de l'utilisateur Amazon VPC.

Activer les connexions entrantes

  1. Connectez-vous à la console Amazon MQ.

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

  3. Sur la MyBrokerpage, 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.

  4. 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 Pencil icon indicating an edit or modification action. .

    La page Groupes de sécurité du EC2 tableau de bord s'affiche.

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

  6. Au bas de la page, choisissez Entrant, puis Modifier.

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

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

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

    4. Choisissez Save (Enregistrer).

      Votre agent peut désormais accepter les connexions entrantes.

Ajout de dépendances Java

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 Project Object Model dans Apache Maven, consultez Introduction to the POM (Présentation de POM).

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

Si vous utilisez Gradle 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

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

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

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

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

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 client Java RabbitMQ, consultez le Guide de l'API client Java RabbitMQ.

Étape 3 : (Facultatif) Se connecter à une AWS Lambda fonction

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 qui lit les messages d'une file d'attente et appelle la fonction de manière synchrone. 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 de votre fonction Lambda.

    Note

    Sans les autorisations IAM nécessaires, votre fonction ne sera pas en mesure de lire correctement les enregistrements des ressources Amazon MQ.

  2. (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 :

  3. Configurez votre agent en tant que source d'événement pour une fonction Lambda à l'aide de la AWS Management Console. Vous pouvez également utiliser la create-event-source-mapping AWS Command Line Interface commande.

  4. É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==" } ] } }

Pour plus d'informations sur la connexion d'Amazon MQ à Lambda, les options prises en charge par Lambda pour une source d'événement Amazon MQ et les erreurs de mappage de la source d'événement, consultez Utilisation de Lambda avec Amazon MQ dans le Guide du développeur AWS Lambda .