Mise en route : création et connexion à un courtier 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.

Mise en route : création et connexion à un courtier RabbitMQ

Un agent est un environnement d'agent de messages qui s'exécute sur Amazon MQ. Il constitue la composante de base d'Amazon MQ. Description combinée de la classe de l'instance de l'agent (m5, t3) et la taille (large, micro) est un type d'instance d'agent (par exemple, mq.m5.large). Pour plus d’informations, consultez Qu'est-ce qu'un courtier Amazon MQ pour RabbitMQ ?.

Étape 1 : Créez un courtier RabbitMQ

La tâche Amazon MQ la plus importante et la plus courante consiste à créer un agent. L'exemple suivant montre comment vous pouvez utiliser le AWS Management Console pour créer un courtier de base.

  1. Connectez-vous à la console Amazon MQ.

  2. Dans la page Select broker engine (Sélectionner le moteur de l'agent), choisissez RabbitMQ, puis choisissez Next (Suivant).

  3. Dans la page Select deployment mode (Sélectionner le mode de déploiement), choisissez le mode de déploiement, par exemple, Cluster deployment (Déploiement en cluster), puis choisissez Next (Suivant).

    • Un broker à instance unique est composé d'un courtier dans une zone de disponibilité derrière un Network Load Balancer NLB (). Le broker communique avec votre application et avec un volume EBS de stockage Amazon. Pour de plus amples informations, veuillez consulter Option 1 : courtier à instance unique Amazon MQ pour RabbitMQ.

    • Un déploiement en cluster RabbitMQ pour une haute disponibilité est un regroupement logique de trois nœuds d'agent RabbitMQ derrière d'un Network Load Balancer, chacun partageant des utilisateurs, des files d'attente et un état distribué sur plusieurs zones de disponibilité (AZ). Pour de plus amples informations, veuillez consulter Option 2 : déploiement du cluster Amazon MQ pour RabbitMQ.

  4. Sur la page Configure settings (Configurer les paramètres), dans la section Details (Détails), effectuez ce qui suit :

    1. Saisissez le nom de l'agent.

      Important

      N'ajoutez pas d'informations personnellement identifiables (PII) ou d'autres informations confidentielles ou sensibles dans les noms des courtiers. Les noms des courtiers sont accessibles à d'autres AWS services, notamment CloudWatch aux journaux. Les noms d'agents ne sont pas destinées à être utilisées pour des données privées ou sensibles.

    2. Cliquez sur Broker instance type (Type d'instance de l'agent) (par exemple, mq.m5.large). Pour de plus amples informations, veuillez consulter Broker instance types.

    Note

    La section Paramètres supplémentaires propose des options permettant d'activer CloudWatch les journaux et de configurer l'accès au réseau pour votre courtier. Si vous créez un courtier RabbitMQ privé sans accès public, vous devez sélectionner un cloud privé virtuel (VPC) et configurer un groupe de sécurité pour accéder à votre courtier.

  5. Dans la page Configure settings (Configuration des paramètres), dans la section RabbitMQ access (Accès à RabbitMQ), renseignez les champs Username (Nom d'utilisateur) et Password (Mot de passe). Les restrictions suivantes s'appliquent aux informations d’identification de connexion des agents :

    • Votre nom d'utilisateur peut contenir uniquement des caractères alphanumériques, des tirets, des points et des traits de soulignement (- . _). Cette valeur ne doit pas contenir de caractères tilde (~). Amazon MQ interdit l'utilisation de guest comme nom d'utilisateur.

    • Votre mot de passe doit comporter 12 caractères minimum, dont au moins 4 caractères uniques, et ne doit pas contenir de virgules, de deux-points ou de signes égal (,:=).

    Important

    N'ajoutez pas d'informations personnellement identifiables (PII) ou d'autres informations confidentielles ou sensibles dans les noms d'utilisateur des courtiers. Les noms d'utilisateur des courtiers sont accessibles à d'autres AWS services, notamment aux CloudWatch journaux. Les noms d'utilisateur des agents ne sont pas destinées à être utilisées pour des données privées ou sensibles.

  6. Choisissez Suivant.

  7. Dans la page Review and create (Vérifier et créer), vous pouvez vérifier vos sélections et les modifier si nécessaire.

  8. Choisissez Create broker (Créer un agent).

    Alors qu'Amazon MQ crée votre agent, il affiche l'état Creation in progress (Création en cours).

    La création d'un agent prend environ 15 minutes.

    Lorsque votre agent est créé avec succès, Amazon MQ affiche l'état Running (En cours d'exécution).

  9. Choisissez MyBroker.

    Dans la page MyBrokerpage, dans la section Connect, notez la console Web RabbitMQ de votre courtierURL, par exemple :

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

    Notez également le point de AMQPterminaison sécurisé de votre courtier. Voici un exemple de amqpspoint de terminaison exposant un port d'écouteur 5671.

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

Étape 2 : Connectez une application JVM basée à 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 VPC les attributs

Pour vous assurer que votre courtier est accessible au sein de votreVPC, vous devez activer les enableDnsSupport VPC attributs enableDnsHostnames et. Pour plus d'informations, consultez la section DNSSupport VPC dans le guide de VPC l'utilisateur Amazon.

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. Dans la page MyBrokerpage, dans la section Connexions, notez les adresses et les ports de la console Web du courtier URL 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 Modifier les règles entrantes, ajoutez une règle pour chaque URL point de terminaison que vous souhaitez rendre accessible au public (l'exemple suivant montre comment procéder pour une console Web de courtier).

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

    2. Pour Type, sélectionnez Personnalisé TCP.

    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 de modèles d'objets de projet dans Apache Maven, consultez Présentation du 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 package de premier niveau, des Channel API classes Connection et représentant respectivement une connexion et un canal AMQP 0-9-1. 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 AMQP Builder classe pour créer un objet de propriétés de message avec content-typeplain/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 cliente Java RabbitMQ, consultez le Guide du client Java RabbitMQ. API

É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 des sources d'événements que vous créez lit les messages de votre courtier 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 IAM rôle suivantes à votre rôle d'exécution de fonction Lambda.

    Note

    Sans les IAM autorisations nécessaires, votre fonction ne pourra pas 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 .