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-Tutorials
Themen
- Bearbeiten von Broker-Einstellungen
- Verwenden von Python Pika mit Amazon MQ for RabbitMQ
- Auflösen der Synchronisierung von RabbitMQ angehaltener Warteschlangensynchronisierung
- Schritt 2: Connect eine JVM-basierte Anwendung mit Ihrem Broker
- Schritt 3: (Optional) Connect zu einer AWS Lambda Funktion herstellen
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
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 dieenableDnsHostnames
undenableDnsSupport
VPC Attribute Weitere Informationen finden Sie unter DNS-Support in Ihrer VPC im Amazon-VPC-Benutzerhandbuch.
Eingehende Verbindungen aktivieren
Melden Sie sich bei der Amazon MQ-Konsole
an. Wählen Sie aus der Brokerliste den Namen Ihres Brokers aus (z. B.). MyBroker
-
Notieren Sie sich auf der
MyBroker
Seite im Abschnitt Verbindungen die Adressen und Ports der Webkonsolen-URL und der Wire-Level-Protokolle des Brokers. -
Wählen Sie im Abschnitt Details unter Sicherheit und Netzwerk den Namen Ihrer Sicherheitsgruppe oder
.
Die Seite Sicherheitsgruppen des EC2 Dashboards wird angezeigt.
-
Wählen Sie in der Liste der Sicherheitsgruppen Ihre Sicherheitsgruppe.
-
Klicken Sie unten auf der Seite auf Inbound (Eingehend) und anschließend auf Edit (Bearbeiten).
-
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).
-
Klicken Sie auf Add Rule (Regel hinzufügen).
-
Wählen Sie für Type (Typ) Custom TCP (Benutzerdefiniertes TCP).
-
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
). -
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.xml
Datei. 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
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ürAMQPS
Wire-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, dassBasicProperties
ist 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 einConsumer
besteht 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
-
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.
-
(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:
-
Konfigurieren Sie ein NAT-Gateway pro öffentlichem Subnetz. Weitere Informationen finden Sie unterInternet- und Servicezugriff für VPC-verbundene FunktionenimAWS Lambda Entwicklerhandbuch.
-
Erstellen Sie mithilfe eines VPC-Endpunkts eine Verbindung zwischen Ihrer Amazon Virtual Private Cloud (Amazon VPC) und Lambda. Ihre Amazon VPC muss auch eine Verbindung zu AWS Security Token Service (AWS STS) und Secrets Manager Manager-Endpunkten herstellen. Weitere Informationen finden Sie unterKonfigurieren von Schnittstellen-VPC-Endpunkten für LambdaimAWS Lambda Entwicklerhandbuch.
-
-
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 -
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 untertest::/
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.