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
Rubriques
É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
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
Connectez-vous à la console Amazon MQ
. Dans la liste des courtiers, choisissez le nom de votre courtier (par exemple, MyBroker).
-
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. -
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
.
La page Groupes de sécurité du EC2 tableau de bord s'affiche.
-
Dans la liste des groupes de sécurité, choisissez votre groupe de sécurité.
-
Au bas de la page, choisissez Entrant, puis Modifier.
-
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).
-
Choisissez Add Rule (Ajouter une règle).
-
Pour Type, sélectionnez Custom TCP (TCP personnalisé).
-
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
). -
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
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
-
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.
-
(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 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 dans leGuide du développeur AWS Lambda .
-
-
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. -
É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 soustest::/
.{ "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 .