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

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 de plus amples informations, veuillez consulter Qu'est-ce qu'un courtier Amazon MQ pour ActiveMQ ?.

Étape 1 : créer un courtier ActiveMQ

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 Apache ActiveMQ.

  3. Dans la page Select deployement and storage (Sélectionner le déploiement et le stockage), dans la section Deployement mode and storage type (Mode de déploiement et type de stockage), procédez comme suit :

    1. Cliquez sur l'onglet Deployement mode (Mode de déploiement) (par exemple, Active/standby broker (Agent actif/en veille). Pour de plus amples informations, veuillez consulter Options de déploiement pour Amazon MQ pour les courtiers ActiveMQ.

      • Un agent à instance unique est composé d'un agent dans une zone de disponibilité. Le broker communique avec votre application et avec un volume de EFS stockage Amazon EBS ou Amazon. Pour de plus amples informations, veuillez consulter Option 1 : courtiers en instance unique Amazon MQ.

      • Un agent actif/en veille pour une haute disponibilité est composé de deux agents répartis dans deux zones de disponibilité différentes, configurés dans une paire redondante. Ces courtiers communiquent de manière synchrone avec votre application et avec AmazonEFS. Pour de plus amples informations, veuillez consulter Option 2 : courtiers actifs/de réserve Amazon MQ pour une haute disponibilité.

      • Pour plus d'informations sur les exemples de plans pour un réseau d'agents, consultez Exemples de plans.

    2. Choisissez le type de stockage (par exemple, EBS). Pour de plus amples informations, veuillez consulter Storage.

      Note

      Amazon EBS réplique les données au sein d'une seule zone de disponibilité et ne prend pas en charge le mode de déploiement actif/en veille d'ActiveMQ.

    3. Choisissez Suivant.

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

    1. Renseignez Broker name (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.

  5. Dans la section ActiveMQ Web Console access (Accès à la console web ActiveMQ), renseignez Username (Nom d'utilisateur) et Password (Mot de passe). Les restrictions suivantes s'appliquent aux noms d'utilisateur et aux mots de passe des agents :

    • Votre nom d'utilisateur peut contenir uniquement des caractères alphanumériques, des tirets, des points, des traits de soulignement et des tildes (- . _ ~).

    • 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 Deploy (Déployer).

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

  7. Choisissez MyBroker.

    Dans la page MyBrokerpage, dans la section Connect, notez la URL console Web ActiveMQ de votre courtier, par exemple :

    https://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:8162

    Notez également que les points de terminaison du protocole de niveau filaire de votre agent. Voici un exemple de point de OpenWire terminaison :

    ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617

Étape 2 : Connectez une application Java à votre courtier

Après avoir créé un agent ActiveMQ Amazon MQ, vous pouvez y connecter votre application. Les exemples suivants montrent comment utiliser le service de message Java (JMS) pour créer une connexion avec le courtier, créer une file d'attente et envoyer un message. Pour un exemple Java complet et fonctionnel, consultez Working Java Example.

Vous pouvez vous connecter à des agents ActiveMQ à l’aide de différents clients ActiveMQ. Nous vous recommandons d’utiliser le client ActiveMQ.

Prérequis

Activer VPC les attributs

Note

Vous ne pouvez pas désactiver l'accessibilité publique pour vos agents Amazon MQ existants.

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

Suivez ensuite les instructions suivantes pour activer les connexions entrantes pour votre courtier.

  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 Port Range (Plage de ports), saisissez le port de la console web (8162).

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

    5. Choisissez Save (Enregistrer).

      Votre agent peut désormais accepter les connexions entrantes.

Ajouter des dépendances Java

Ajoutez les packages activemq-client.jar et activemq-pool.jar au chemin de classe Java. L'exemple suivant illustre ces dépendances dans un fichier pom.xml de projet Maven.

<dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-client</artifactId> <version>5.15.16</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>5.15.16</version> </dependency> </dependencies>

Pour plus d'informations sur activemq-client.jar, consultez Configuration initiale dans la documentation ActiveMQ Apache.

Important

Dans l'exemple de code suivant, les producteurs et les consommateurs s'exécutent dans un seul thread. Pour les systèmes de production (ou pour tester le basculement d'instance d'agent), assurez-vous que vos producteurs et vos consommateurs s'exécutent sur des hôtes ou des threads distincts.

Créer un producteur de messages et envoyer un message

Ensuite, vérifiez que votre courtier peut recevoir un message en créant un producteur de message et en envoyant un message.

  1. Créez une fabrique de connexions JMS groupée pour le producteur de messages à l'aide du point de terminaison de votre courtier, puis appelez la createConnection méthode par rapport à l'usine.

    Note

    Pour un broker actif/de réserve, Amazon MQ fournit deux URLs consoles Web ActiveMQ, mais une seule est active à la fois. URL De même, Amazon MQ fournit deux points de terminaison pour chaque protocole de niveau filaire, mais un seul point de terminaison est actif dans chaque paire à la fois. Les suffixes -1 et -2 indiquent une paire redondante. Pour de plus amples informations, veuillez consulter Options de déploiement pour Amazon MQ pour les courtiers ActiveMQ.

    Pour les points de terminaison de protocole de niveau filaire, vous pouvez autoriser votre application à se connecter à l'un ou l'autre des points de terminaison à l'aide du transport de basculement.

    // Create a connection factory. final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(wireLevelEndpoint); // Pass the sign-in credentials. connectionFactory.setUserName(activeMqUsername); connectionFactory.setPassword(activeMqPassword); // Create a pooled connection factory. final PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(); pooledConnectionFactory.setConnectionFactory(connectionFactory); pooledConnectionFactory.setMaxConnections(10); // Establish a connection for the producer. final Connection producerConnection = pooledConnectionFactory.createConnection(); producerConnection.start(); // Close all connections in the pool. pooledConnectionFactory.clear();
    Note

    Les producteurs de messages doivent toujours utiliser la classe PooledConnectionFactory. Pour de plus amples informations, veuillez consulter Toujours utiliser le regroupement de connexions.

  2. Créez une session, une file d'attente nommée MyQueue et un producteur de messages.

    // Create a session. final Session producerSession = producerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); // Create a queue named "MyQueue". final Destination producerDestination = producerSession.createQueue("MyQueue"); // Create a producer from the session to the queue. final MessageProducer producer = producerSession.createProducer(producerDestination); producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  3. Créez la chaîne de message "Hello from Amazon MQ!", puis envoyez le message.

    // Create a message. final String text = "Hello from Amazon MQ!"; TextMessage producerMessage = producerSession.createTextMessage(text); // Send the message. producer.send(producerMessage); System.out.println("Message sent.");
  4. Nettoyez le producteur.

    producer.close(); producerSession.close(); producerConnection.close();

Créer un consommateur de messages et recevoir le message

Après avoir créé un producteur, créez un consommateur pour vérifier qu'il peut recevoir le message.

  1. Créez une fabrique de JMS connexions pour le générateur de messages à l'aide du point de terminaison de votre courtier, puis appelez la createConnection méthode par rapport à l'usine.

    // Create a connection factory. final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(wireLevelEndpoint); // Pass the sign-in credentials. connectionFactory.setUserName(activeMqUsername); connectionFactory.setPassword(activeMqPassword); // Establish a connection for the consumer. final Connection consumerConnection = connectionFactory.createConnection(); consumerConnection.start();
    Note

    Les consommateurs de messages ne doivent jamais utiliser la classe PooledConnectionFactory. Pour de plus amples informations, veuillez consulter Toujours utiliser le regroupement de connexions.

  2. Créez une session, une file d'attente nommée MyQueue et un consommateur de messages.

    // Create a session. final Session consumerSession = consumerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); // Create a queue named "MyQueue". final Destination consumerDestination = consumerSession.createQueue("MyQueue"); // Create a message consumer from the session to the queue. final MessageConsumer consumer = consumerSession.createConsumer(consumerDestination);
  3. Commencez à attendre les messages et recevez le message lorsqu'il arrive.

    // Begin to wait for messages. final Message consumerMessage = consumer.receive(1000); // Receive the message when it arrives. final TextMessage consumerTextMessage = (TextMessage) consumerMessage; System.out.println("Message received: " + consumerTextMessage.getText());
    Note

    Contrairement aux services de AWS messagerie (tels qu'AmazonSQS), le consommateur est constamment connecté au courtier.

  4. Fermez le consommateur, la session et la connexion.

    consumer.close(); consumerSession.close(); consumerConnection.close();

É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 consommés par 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 ActiveMQ.

    Note

    Dans cet exemple, testQueue est le nom de la file d'attente.

    { "eventSource": "aws:amq", "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", "messages": { [ { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", "messageType": "jms/text-message", "data": "QUJDOkFBQUE=", "connectionId": "myJMSCoID", "redelivered": false, "destination": { "physicalname": "testQueue" }, "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959 }, { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", "messageType":"jms/bytes-message", "data": "3DTOOW7crj51prgVLQaGQ82S48k=", "connectionId": "myJMSCoID1", "persistent": false, "destination": { "physicalname": "testQueue" }, "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959 } ] } }

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 source d'événement, consultez Utilisation de Lambda avec Amazon MQ dans le Guide du développeur AWS Lambda .