RabbitMQ-Tutorials - Amazon MQ

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

RabbitMQ-Tutorials

Die folgenden Tutorials zeigen, wie Sie RabbitMQ in Amazon MQ konfigurieren und verwenden. Weitere Informationen zum Arbeiten mit unterstützten Clientbibliotheken in einer Vielzahl von Programmiersprachen wie Node.js, Python, .NET und mehr finden Sie unterRabbitMQ-TutorialsimHandbuch „RabbitMQ“.

Schritt 2: Connect eine JVM-basierte Anwendung mit Ihrem Broker

Nachdem Sie einen RabbitMQ-Broker erstellt haben, können Sie Ihre Anwendung mit ihm verbinden. Die folgenden Beispiele zeigen, wie Sie die RabbitMQ-Client-Bibliothek, um eine Verbindung zu Ihrem Broker zu erstellen, eine Warteschlange zu erstellen und eine Nachricht zu senden. Sie können sich mit RabbitMQ-Brokern verbinden, indem Sie unterstützte RabbitMQ-Client-Bibliotheken für eine Vielzahl von Sprachen verwenden. Weitere Informationen zu unterstützten RabbitMQ-Client-Bibliotheken finden Sie unterRabbitMQ-Client-Bibliotheken und Entwickler-Tools.

Voraussetzungen

Anmerkung

Die folgenden Schritte gelten nur für RabbitMQ-Broker, die ohne öffentliche Zugänglichkeit erstellt wurden. Wenn Sie einen Broker mit öffentlicher Barrierefreiheit erstellen, können Sie ihn überspringen.

Aktivieren der VPC-Attribute

Um sicherzustellen, dass Ihr Broker innerhalb Ihrer VPC zugänglich ist, müssen Sie dieenableDnsHostnamesundenableDnsSupportVPC Attribute Weitere Informationen finden Sie unter DNS-Support in Ihrer VPC im Amazon-VPC-Benutzerhandbuch.

Eingehende Verbindungen aktivieren

  1. Melden Sie sich bei der Amazon MQ-Konsole an.

  2. Wählen Sie aus der Brokerliste den Namen Ihres Brokers aus (z. B.). MyBroker

  3. Notieren Sie sich auf der MyBrokerSeite im Abschnitt Verbindungen die Adressen und Ports der Webkonsolen-URL und der Wire-Level-Protokolle des Brokers.

  4. Wählen Sie im Abschnitt Details unter Sicherheit und Netzwerk den Namen Ihrer Sicherheitsgruppe oder Pencil icon indicating an edit or modification action. .

    Die Seite Sicherheitsgruppen des EC2 Dashboards wird angezeigt.

  5. Wählen Sie in der Liste der Sicherheitsgruppen Ihre Sicherheitsgruppe.

  6. Klicken Sie unten auf der Seite auf Inbound (Eingehend) und anschließend auf Edit (Bearbeiten).

  7. In dem Dialogfeld Edit inbound rules (Bearbeiten von Regeln für eingehenden Datenverkehr), fügen Sie eine Regel für jede URL oder jeden Endpunkt hinzu, auf den Sie öffentlich zugreifen möchten (im folgenden Beispiel wird gezeigt, wie Sie dies für eine Broker-Webkonsole tun).

    1. Klicken Sie auf Add Rule (Regel hinzufügen).

    2. Wählen Sie für Type (Typ) Custom TCP (Benutzerdefiniertes TCP).

    3. FürSourceverlassenBenutzerdefiniertund geben Sie dann die IP-Adresse des Systems ein, auf das auf die Webkonsole zugegriffen werden soll (z. B.192.0.2.1).

    4. Wählen Sie Save.

      Ihr Broker kann nun eingehende Verbindungen akzeptieren.

Java-Abhängigkeiten hinzufügen

Wenn Sie Apache Maven zum Automatisieren von Builds verwenden, fügen Sie die folgende Abhängigkeit zu Ihrerpom.xmlDatei. Weitere Informationen zu Project Object Model Dateien in Apache Maven finden Sie unterEinführung in das POM.

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

Wenn Sie Gradle zum Automatisieren von Builds verwenden, deklarieren Sie die folgende Abhängigkeit.

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

Import Connection und Channel Klassen

Der RabbitMQ-Java-Client verwendet com.rabbitmq.client als Top-Level-Paket mit Connection und Channel API-Klassen, die eine AMQP-0-9-1-Verbindung bzw. einen Kanal darstellen. Importieren Sie die Connection und Channel Klassen vor der Verwendung, wie im folgenden Beispiel gezeigt.

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

Erstellen Sie ein ConnectionFactory und verbinden Sie es mit Ihrem Broker

Mithilfe des folgenden Beispiels können Sie eine Instance der ConnectionFactory-Klasse mit den gegebenen Parametern. Verwenden Sie die setHost Methode um den Broker-Endpunkt zu konfigurieren, den Sie zuvor notiert haben. FürAMQPSWire-Level-Verbindungen, Port verwenden5671.

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();

Veröffentlichen einer Nachricht in einem Börse

Sie können Channel.basicPublish verwenden, um Nachrichten in einem Austausch veröffentlichen. Im folgenden Beispiel wird verwendet, um das AMQPBuilder-Klasse zum Erstellen eines Nachrichteneigenschaftenobjekts mit dem Inhaltstypplain/text.

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

Beachten Sie, dassBasicPropertiesist eine innere Klasse der automatisch generierten Holder-Klasse,AMQP.

Abonnieren Sie eine Warteschlange und erhalten Sie eine Nachricht

Sie können eine Nachricht erhalten, indem Sie eine Warteschlange mit der Consumer-Schnittstelle implementieren. Sobald sie abonniert sind, werden Nachrichten automatisch zugestellt, sobald sie eintreffen.

Der einfachste Weg, um einConsumerbesteht darin, die UnterklasseDefaultConsumer. Ein DefaultConsumer-Objekt kann als Teil eines basicConsume-Aufrufs, um das Abonnement einzurichten, wie im folgenden Beispiel gezeigt.

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

Weil wir autoAck = false spezifizieren, ist es notwendig, Nachrichten zu bestätigen, die an die Consumer geliefert werden, am bequemsten in der handleDelivery-Methode wie im Beispiel gezeigt.

Schließen Sie Ihre Verbindung und trennen Sie vom Broker

Um die Verbindung zu Ihrem RabbitMQ-Broker zu trennen, schließen Sie sowohl den Kanal als auch die Verbindung, wie im Folgenden dargestellt.

channel.close(); conn.close();
Anmerkung

Weitere Informationen zum Arbeiten mit der RabbitMQ-Java-Client-Bibliothek finden Sie imRabbitMQ Java-Client-API-Handbuch.

Schritt 3: (Optional) Connect zu einer AWS Lambda Funktion herstellen

AWS Lambda kann eine Verbindung zu Ihrem Amazon MQ-Broker herstellen und Nachrichten von diesem empfangen. Wenn Sie einen Broker mit Lambda verbinden, erstellen Sie eine Ereignisquellen-Zuweisung, der Nachrichten aus einer Warteschlange liest und die Funktionsynchron. Die Ereignisquellen-Zuweisung, die Sie erstellen, liest Nachrichten von Ihrem Broker in Batches und wandelt sie in eine Lambda -Payload in Form eines JSON-Objekts um.

So verbinden Sie Ihren Broker mit einer Lambda Funktion
  1. Fügen Sie die folgenden IAM-Rollenberechtigungen zu der Ausführungsrolle Ihrer Lambda-Funktion hinzu.

    Anmerkung

    Ohne die erforderlichen IAM-Berechtigungen ist Ihre Funktion nicht in der Lage, Datensätze aus Amazon MQ Ressourcen erfolgreich zu lesen.

  2. (Optional) Wenn Sie einen Broker ohne öffentliche Zugänglichkeit erstellt haben, müssen Sie einen der folgenden Schritte ausführen, damit Lambda eine Verbindung zu Ihrem Broker herstellen kann:

  3. Konfigurieren Sie Ihren Broker als EreignisquelleVerwendung für eine Lambda -Funktion unter Verwendung der AWS Management Console. Sie können den Befehl auch verwenden. create-event-source-mapping AWS Command Line Interface

  4. Schreiben Sie Code für Ihre Lambda Funktion, um die von Ihrem Broker verbrauchten Nachrichten zu verarbeiten. Die Lambda-Payload, die von der Ereignisquellen-Zuweisung abgerufen wird, hängt vom Modultyp des Brokers ab. Im Folgenden finden Sie ein Beispiel für eine Lambda -Payload für eine Amazon MQ for RabbitMQ-Warteschlange.

    Anmerkung

    Im Beispiel ist test der Name der Warteschlange und / der Name des vorgegebenen virtuellen Hosts. Beim Empfang von Nachrichten listet die Ereignisquelle Nachrichten unter test::/ auf.

    { "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==" } ] } }

Weitere Informationen zum Verbinden von Amazon MQ mit Lambda, zu den Optionen, die Lambda für eine Amazon-MQ-Ereignisquelle unterstützt, und zu Fehlern bei der Ereignisquellen-Zuweisung finden Sie unter Verwenden von Lambda mit Amazon MQ im AWS Lambda -Entwicklerhandbuch.