

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.

# ActiveMQ Tutorials
<a name="activemq-on-amazon-mq"></a>

Die folgenden Tutorials zeigen, wie Sie Ihre ActiveMQ-Broker erstellen und eine Verbindung mit ihnen herstellen können. Wenn Sie den ActiveMQ Java Beispiel-Code verwenden möchten, müssen Sie das [Java Standard Edition Development Kit](https://www.oracle.com/technetwork/java/javase/downloads/index.html) installieren und einige Konfigurationsänderungen am Code vornehmen.

**Topics**
+ [Creating and Configuring a Network of Brokers](amazon-mq-creating-configuring-network-of-brokers.md)
+ [Connecting a Java application to your broker](amazon-mq-connecting-application.md)
+ [Integration von ActiveMQ-Brokern in LDAP](security-authentication-authorization.md)
+ [Connect your Amazon MQ for ActiveMQ broker to Lambda](#activemq-connect-to-lambda)
+ [Einen ActiveMQ-Broker-Benutzer erstellen](amazon-mq-listing-managing-users.md)
+ [Einen ActiveMQ-Broker-Benutzer bearbeiten](edit-existing-user-console.md)
+ [Löschen Sie einen ActiveMQ-Broker-Benutzer](delete-existing-user-console.md)
+ [Working Java Example](amazon-mq-working-java-example.md)

# Erstellen und Konfigurieren eines Amazon MQ-Netzwerks von Brokern
<a name="amazon-mq-creating-configuring-network-of-brokers"></a>

Ein *-Netzwerk von Brokern*besteht aus mehreren gleichzeitig aktiven[Single-Instance-Brokern](amazon-mq-broker-architecture.md#single-broker-deployment)oder[aktiven/Standby-Brokern](amazon-mq-broker-architecture.md#active-standby-broker-deployment). In diesem Tutorial erfahren Sie, wie Sie ein Zwei-Broker-Netzwerk von Brokern mit einer *Source and Sink*-Topologie erstellen. 

Eine konzeptionelle Übersicht und detaillierte Konfigurationsinformationen finden Sie im Folgenden:
+ [Amazon MQ Brokernetzwerk](network-of-brokers.md)
+ [Korrekte Konfiguration Ihres Netzwerk von Brokern](best-practices-activemq.md#network-of-brokers-configure-correctly)
+ `networkConnector`
+ `networkConnectionStartAsynchron`
+ [Netzwerke von Brokern](http://activemq.apache.org/networks-of-brokers.html) in der ActiveMQ-Dokumentation

Sie können die Amazon MQ Konsole verwenden, um ein Amazon MQ-Netzwerk von Brokern zu erstellen. Da Sie die Erstellung der beiden Broker parallel starten können, dauert dieser Prozess ca. 15 Minuten. 

**Topics**
+ [Voraussetzungen](#creating-configuring-network-of-brokers-create-brokers)
+ [Configure the Brokers in a Network](#creating-configuring-network-of-brokers-allow-traffic)
+ [Configure Network Connectors for Your Broker](#creating-configuring-network-of-brokers-configure-network-connectors)
+ [Next Steps: Test the Network of Brokers](#creating-configuring-network-of-brokers-test)

## Voraussetzungen
<a name="creating-configuring-network-of-brokers-create-brokers"></a>

Um ein Netzwerk von Brokern zu erstellen, müssen Sie über Folgendes verfügen:
+ Zwei oder mehr gleichzeitig aktive Broker (in diesem Tutorial `MyBroker1` und `MyBroker2` genannt). Weitere Informationen zum Erstellen von Brokern finden Sie unter [Erste Schritte: Einen ActiveMQ-Broker erstellen und eine Verbindung zu ihm herstellen](getting-started-activemq.md).
+ Die beiden Broker müssen sich in derselben VPC oder im VPCs Peered-Modus befinden. Weitere Informationen finden Sie VPCs unter [Was ist Amazon VPC?](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) im *Amazon VPC-Benutzerhandbuch* und [Was ist VPC](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html) Peering? im *Amazon VPC Peering Guide*.
**Wichtig**  
Wenn Sie keinen Standard-VPC, kein Subnetz oder keine Sicherheitsgruppe haben, müssen Sie diese zuerst erstellen. Weitere Informationen finden Sie unter den folgenden Themen im *Amazon VPC Benutzerhandbuch*:  
[Erstellen einer Standard-VPC](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html#create-default-vpc)
[Erstellen eines Standard-Subnetzes](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html#create-default-subnet)
[Erstellen einer Sicherheitsgruppe](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#CreatingSecurityGroups)
+ Zwei Benutzer mit identischen Anmeldeinformationen für beide Broker. Weitere Informationen zum Erstellen von Benutzern finden Sie unter [Einen ActiveMQ-Broker-Benutzer erstellen](amazon-mq-listing-managing-users.md). 
**Anmerkung**  
Stellen Sie bei der Integration von LDAP-Authentifizierung in ein Netzwerk von Brokern sicher, dass der Benutzer sowohl als ActiveMQ -Broker als auch als LDAP-Benutzer vorhanden ist.

Das folgende Beispiel verwendet zwei [Single-Instance-Broker](amazon-mq-broker-architecture.md#single-broker-deployment). Sie können jedoch Netzwerke von Brokern mit Hilfe von [aktiv/standby-Brokern](amazon-mq-broker-architecture.md#active-standby-broker-deployment) oder einer Kombination von Broker-Bereitstellungsarten erstellen.

## Schritt 1: Zulassen von Datenverkehr zwischen Brokern
<a name="creating-configuring-network-of-brokers-allow-traffic"></a>

Nachdem Sie Ihre Broker erstellt haben, müssen Sie den Datenverkehr zwischen ihnen zulassen.

1. Wählen Sie auf der [Amazon MQ MQ-Konsole](https://console.aws.amazon.com/amazon-mq/) auf der **MyBroker2-Seite** im Abschnitt **Details** unter **Sicherheit und Netzwerk** den Namen Ihrer Sicherheitsgruppe oder![\[Pencil icon indicating an edit or modification action.\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-broker-details-link.png).

   Die Seite **Security Groups** (Sicherheitsgruppen) des EC2-Dashboards wird angezeigt.

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

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

1. Fügen **Sie im Dialogfeld „Regeln für eingehenden Datenverkehr bearbeiten**“ eine Regel für den OpenWire Endpunkt hinzu.

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

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

   1. Geben Sie für **Portbereich** den OpenWire Port (`61617`) ein.

   1. Führen Sie eine der folgenden Aktionen aus:
      + Wenn Sie den Zugriff auf eine bestimmte IP-Adresse einschränken möchten, lassen Sie bei **Source** (Quelle), **Custom** (Benutzerdefiniert) ausgewählt, und geben Sie dann die IP-Adresse von `MyBroker1` gefolgt von `/32` ein. (Dadurch wird die IP-Adresse in einen gültigen CIDR-Eintrag umgewandelt). Weitere Informationen finden Sie unter [Elastic Network Interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) (Elastic Network-Schnittstellen).
**Tipp**  
Wählen Sie zum Abrufen der IP-Adresse von `MyBroker1` in der [Amazon MQ-Konsole](https://console.aws.amazon.com/amazon-mq/) den Namen des Brokers aus und navigieren Sie zum Abschnitt **Details**.
      + Wenn alle Ihre Broker privat sind und zur gleichen VPC gehören, lassen Sie bei **Source** (Quelle) **Custom** (Benutzerdefiniert) ausgewählt und geben Sie dann die ID der Sicherheitsgruppe ein, die Sie bearbeiten.
**Anmerkung**  
Für öffentliche Broker müssen Sie den Zugriff unter Verwendung von IP-Adressen einschränken.

   1. Wählen Sie **Save** (Speichern) aus.

      Ihr Broker kann nun eingehende Verbindungen akzeptieren.

## Schritt 2: Konfigurieren von Netzwerk-Connectors für Ihren Broker
<a name="creating-configuring-network-of-brokers-configure-network-connectors"></a>

Nachdem Sie den Datenverkehr zwischen Ihren Brokern zugelassen haben, müssen Sie Netzwerk-Connectors für einen von ihnen konfigurieren.

1. Bearbeiten Sie die Konfigurationsrevision für den Broker `MyBroker1`.

   1. Wählen Sie auf der Seite **MyBroker1** die Option **Bearbeiten** aus.

   1. Wählen Sie auf der Seite **Edit MyBroker 1** im Abschnitt **Konfiguration** die Option **View** aus.

      Der Typ der Broker-Engine und die Version, die die Konfiguration verwendet (z. B. **Apache ActiveMQ 5.15.0**) werden angezeigt.

   1. Auf der Registerkarte **Configuration details** (Konfigurationsdetails) werden die Konfigurations-Revisionsnummer, die Beschreibung und die Broker-Konfiguration im XML-Format angezeigt.

   1. Wählen Sie **Edit configuration** (Konfiguration bearbeiten) aus.

   1. Entkommentieren Sie am Ende der Konfigurationsdatei den Abschnitt `<networkConnectors>` und fügen Sie die folgenden Informationen hinzu:
      + Den `name` für den Netzwerk-Connector.
      + [Die ActiveMQ-Webkonsolen-`username`](#creating-configuring-network-of-brokers-create-brokers) der beiden Brokern gemeinsam ist.
      + Aktivieren Sie `duplex`-Verbindungen.
      + Führen Sie eine der folgenden Aktionen aus:
        + Wenn Sie den Broker mit einem Single-Instance-Broker verbinden, verwenden Sie das `static:` Präfix und den OpenWire Endpunkt `uri` für`MyBroker2`. Beispiel:

          ```
          <networkConnectors>
            <networkConnector name="connector_1_to_2" userName="myCommonUser" duplex="true"
              uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/>
          </networkConnectors>
          ```
        + Wenn Sie den Broker mit einem aktiven/Standby-Broker verbinden, verwenden Sie den `static+failover` Transport und den OpenWire Endpunkt `uri` für beide Broker mit den folgenden Abfrageparametern. `?randomize=false&maxReconnectAttempts=0` Beispiel:

          ```
          <networkConnectors>
            <networkConnector name="connector_1_to_2" userName="myCommonUser" duplex="true"
              uri="static:(failover:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617,
              ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-west-2.amazonaws.com:61617)?randomize=false&amp;maxReconnectAttempts=0)"/>
          </networkConnectors>
          ```
**Anmerkung**  
Geben Sie die Anmeldeinformationen für den ActiveMQ-Benutzer nicht an.

   1. Wählen Sie **Speichern**.

   1. Geben Sie im Dialogfeld **Save revision** (Revision speichern) `Add network of brokers connector for MyBroker2` ein.

   1. Wählen Sie **Save** (Speichern) aus, um die neue Revision der Konfiguration zu speichern.

1. Bearbeiten Sie `MyBroker1`, um die neueste Revision der Konfiguration so einzustellen, dass sie sofort wirksam wird.

   1. **Wählen Sie auf der Seite **MyBroker1** die Option Bearbeiten aus.**

   1. Wählen Sie auf der Seite **Bearbeiten MyBroker 1** im Abschnitt **Konfiguration** die Option **Änderungen planen** aus.

   1. Wählen Sie im Abschnitt **Schedule broker modifications** (Broker-Änderungen planen) aus, dass Änderungen **Immediately** (Sofort) wirksam werden sollen.

   1. Wählen Sie **Apply** (Anwenden) aus.

      `MyBroker1` wird neu gestartet und Ihre Konfigurationsrevision wird angewendet.

   Das Netzwerk von Brokern wird erstellt.

## Nächste Schritte
<a name="creating-configuring-network-of-brokers-test"></a>

Nachdem Sie Ihr Netzwerk von Brokern konfiguriert haben, können Sie es testen, indem Sie Nachrichten produzieren und konsumieren.

**Wichtig**  
Stellen Sie sicher, dass Sie [eingehende Verbindungen *von Ihrem lokalen Computer* für den Broker `MyBroker1` auf Port 8162 (für die ActiveMQ Web Console) und Port 61617 (für den Endpunkt) aktivieren](amazon-mq-working-java-example.md#quick-start-allow-inbound-connections). OpenWire  
Möglicherweise müssen Sie auch die Einstellungen Ihrer Sicherheitsgruppe(n) anpassen, damit der Produzent und der Verbraucher eine Verbindung zum Netzwerk der Broker herstellen können.

1. Navigieren Sie in der [Amazon MQ-Konsole](https://console.aws.amazon.com/amazon-mq/) zum Abschnitt **Connections (Verbindungen)** und notieren Sie sich den ActiveMQ Web Console-Endpunkt für den Broker `MyBroker1`.

1. Navigieren Sie zur ActiveMQ Web Console für den Broker `MyBroker1`.

1. Um zu überprüfen, ob die Netzwerkbrücke verbunden ist, wählen Sie **Network** (Netzwerk) aus.

   Im Abschnitt **Network Bridges** (Netzwerkbrücken) werden der Name und die Adresse von `MyBroker2` in den Spalten **Remote Broker** (Remote-Broker) und **Remote Address** (Remote-Adresse) aufgeführt.

1. Erstellen Sie von einem beliebigen Computer mit Zugriff auf den Broker `MyBroker2` einen Verbraucher. Beispiel:

   ```
   activemq consumer --brokerUrl "ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617" \
   	--user commonUser \
   	--password myPassword456 \
   	--destination queue://MyQueue
   ```

   Der Verbraucher stellt eine Verbindung zum OpenWire Endpunkt von her `MyBroker2` und beginnt, Nachrichten aus der Warteschlange zu konsumieren. `MyQueue`

1. Erstellen Sie von einem beliebigen Computer mit Zugriff auf den Broker `MyBroker1` einen Produzenten und senden Sie einige Nachrichten. Beispiel:

   ```
   activemq producer --brokerUrl "ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-1.mq.us-east-2.amazonaws.com:61617" \
   	--user commonUser \
   	--password myPassword456 \
   	--destination queue://MyQueue \
   	--persistent true \
   	--messageSize 1000 \
   	--messageCount 10000
   ```

   Der Producer stellt eine Verbindung zum OpenWire Endpunkt von her `MyBroker1` und beginnt, persistente Nachrichten für die Warteschlange zu erzeugen`MyQueue`.

# Verbinden einer Java-Anwendung mit Ihrem Amazon MQ-Broker
<a name="amazon-mq-connecting-application"></a>

Nachdem Sie einen Amazon MQ ActiveMQ Broker erstellt haben, können Sie Ihre Anwendung mit ihm verbinden. Die folgenden Beispiele zeigen, wie Sie den Java Message Service (JMS) verwenden können, um eine Verbindung zum Broker zu erstellen, eine Warteschlange zu erstellen und eine Nachricht zu senden. Ein vollständiges, funktionierendes Java-Beispiel finden Sie unter[Funktionierende Beispiele für die Verwendung von Java Message Service (JMS) mit ActiveMQ](amazon-mq-working-java-example.md).

Sie können unter Verwendung [verschiedener ActiveMQ-Clients](http://activemq.apache.org/cross-language-clients.html) eine Verbindung zu ActiveMQ-Brokern einrichten. Wir empfehlen die Verwendung des [ActiveMQ-Clients](https://mvnrepository.com/artifact/org.apache.activemq/activemq-client).

**Topics**
+ [Voraussetzungen](#connect-application-prerequisites-tutorial)
+ [So erstellen Sie einen Nachrichtenproduzenten und senden eine Nachricht:](#create-producer-send-message-tutorial)
+ [So erstellen Sie einen Nachrichtenkonsumenten und empfangen die Nachricht:](#create-consumer-receive-message-tutorial)

## Voraussetzungen
<a name="connect-application-prerequisites-tutorial"></a>

### Aktivieren der VPC-Attribute
<a name="connect-application-enable-vpc-attributes-tutorial"></a>

Um sicherzustellen, dass Ihr Broker innerhalb Ihrer VPC zugänglich ist, müssen Sie die`enableDnsHostnames`und`enableDnsSupport`VPC Attribute Weitere Informationen finden Sie unter [DNS-Support in Ihrer VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support) im *Amazon-VPC-Benutzerhandbuch*.

### Eingehende Verbindungen aktivieren
<a name="connect-application-allow-inbound-connections-tutorial"></a>

Aktivieren Sie als Nächstes eingehende Verbindungen für Ihre Anwendung.

1. Melden Sie sich bei der [Amazon-MQ-Konsole](https://console.aws.amazon.com/amazon-mq/) an.

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

1. Notieren Sie sich auf der ***MyBroker***Seite im Abschnitt **Verbindungen** die Adressen und Ports der Webkonsolen-URL und der Wire-Level-Protokolle des Brokers.

1. Wählen Sie im Abschnitt **Details** unter **Sicherheit und Netzwerk** den Namen Ihrer Sicherheitsgruppe oder ![\[Pencil icon indicating an edit or modification action.\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-broker-details-link.png).

   Die Seite **Security Groups** (Sicherheitsgruppen) des EC2-Dashboards wird angezeigt.

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

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

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

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

   1. Für **Port-Bereich**, geben Sie den Port der Webkonsole ein (`8162`).

   1. Für **Source** (Quelle), lassen Sie **Custom** (Benutzerdefiniert) ausgewählt, und geben Sie dann die IP-Adresse des Systems ein, auf das auf die Webkonsole zugegriffen werden soll (z. B. `192.0.2.1`) enthalten.

   1. Wählen Sie **Save**.

      Ihr Broker kann nun eingehende Verbindungen akzeptieren.

### Java-Abhängigkeiten hinzufügen
<a name="connect-application-java-dependencies-tutorial"></a>

Fügen Sie dem Pfad für Ihre Java-Build-Klasse die Pakete `activemq-client.jar` und `activemq-pool.jar`hinzu. Das folgende Beispiel zeigt diese Abhängigkeiten in der `pom.xml`-Datei eines Maven-Projekts.

```
<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>
```

Weitere Informationen über `activemq-client.jar` finden Sie unter [Ursprüngliche Konfiguration](http://activemq.apache.org/initial-configuration.html) in der Apache ActiveMQ-Dokumentation.

**Wichtig**  
Im folgenden Beispielcode laufen Hersteller und Verbraucher in einem einzigen Thread. Stellen Sie für Produktionssysteme (oder zum Testen des Failovers von Broker-Instances) sicher, dass Ihre Produzenten und Verbraucher auf separaten Hosts oder Threads ausgeführt werden.

## So erstellen Sie einen Nachrichtenproduzenten und senden eine Nachricht:
<a name="create-producer-send-message-tutorial"></a>

 Verwenden Sie die folgende Anweisung, um einen Nachrichtengenerator zu erstellen und eine Nachricht zu empfangen.

1. Erstellen Sie eine JMS-Pool-Connection Factory für den Nachrichtenproduzenten mit dem Endpunkt Ihres Brokers und rufen Sie dann die`createConnection`Methode gegen die Fabrik.
**Anmerkung**  
Für einen active/standby Broker bietet Amazon MQ zwei ActiveMQ-Web-Konsolen URLs, aber es ist jeweils nur eine URL aktiv. Ebenso stellt Amazon MQ zwei Endpunkte für jedes Wire-Level-Protokoll bereit, jedoch ist jeweils nur ein Endpunkt in jedem Paar aktiv. Die `-1`- und `-2`-Suffixe bezeichnen ein redundantes Paar. Weitere Informationen finden Sie unter [Bereitstellungsoptionen für Amazon MQ für ActiveMQ-Broker](amazon-mq-broker-architecture.md)).  
[Bei Protokollendpunkten auf Wire-Level-Ebene sollten Sie Ihrer Anwendung ermöglichen, mithilfe des Failover-Transports eine Verbindung zu einem der beiden Endpunkte herzustellen.](http://activemq.apache.org/failover-transport-reference.html)

   ```
   // 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();
   ```
**Anmerkung**  
Nachrichtenproduzenten sollten immer die`PooledConnectionFactory`-Klasse. Weitere Informationen finden Sie unter [Verwenden Sie immer Verbindungspools](best-practices-activemq.md#always-use-connection-pooling).

1. Erstellen Sie eine Sitzung, eine Warteschlange namens`MyQueue`und einen Nachrichtenproduzenten.

   ```
   // 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);
   ```

1. Erstellen der Nachrichtenzeichenfolge`"Hello from Amazon MQ!"`Dann senden Sie die Nachricht.

   ```
   // 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.");
   ```

1. Bereinigen Sie den Produzenten.

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

## So erstellen Sie einen Nachrichtenkonsumenten und empfangen die Nachricht:
<a name="create-consumer-receive-message-tutorial"></a>

 Verwenden Sie die folgende Anweisung, um einen Nachrichtengenerator zu erstellen und eine Nachricht zu empfangen.

1. Erstellen Sie eine JMS-Connection Factory für den Nachrichtenproduzenten mit dem Endpunkt Ihres Brokers und rufen Sie dann die`createConnection`Methode gegen die Fabrik.

   ```
   // 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();
   ```
**Anmerkung**  
Die Nachrichtenkonsumenten sollten *nie* die `PooledConnectionFactory`-Klasse verwenden. Weitere Informationen finden Sie unter [Verwenden Sie immer Verbindungspools](best-practices-activemq.md#always-use-connection-pooling).

1. Erstellen Sie eine Sitzung, eine Warteschlange namens`MyQueue`und einem Nachrichtenverbraucher.

   ```
   // 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);
   ```

1. Beginnen Sie, auf Nachrichten zu warten und die Nachricht zu erhalten, wenn sie eintrifft.

   ```
   // 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());
   ```
**Anmerkung**  
Im Gegensatz zu AWS Messaging-Diensten (wie Amazon SQS) ist der Verbraucher ständig mit dem Broker verbunden.

1. Schließen Sie den Verbraucher, die Sitzung und die Verbindung.

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

# Integration von ActiveMQ-Brokern in LDAP
<a name="security-authentication-authorization"></a>

**Wichtig**  
Amazon MQ unterstützt kein Serverzertifikat, das von einer privaten Zertifizierungsstelle ausgestellt wurde.

Sie können über die folgenden Protokolle mit aktiviertem TLS auf Ihre ActiveMQ-Broker zugreifen:
+ [AMQP](http://activemq.apache.org/amqp.html)
+ [MQTT](http://activemq.apache.org/mqtt.html)
+ MQTT über [WebSocket](http://activemq.apache.org/websockets.html)
+ [OpenWire](http://activemq.apache.org/openwire.html)
+ [STOMP](http://activemq.apache.org/stomp.html)
+ STOMP rüber WebSocket

Amazon MQ bietet die Wahl zwischen nativer ActiveMQ-Authentifizierung und LDAP-Authentifizierung und -Autorisierung, um Benutzerberechtigungen zu verwalten. Weitere Informationen über Einschränkungen im Zusammenhang mit ActiveMQ-Benutzernamen und -Passwörtern finden Sie unter [Benutzer](amazon-mq-limits.md#activemq-user-limits).

Um ActiveMQ-Benutzer und -Gruppen für die Arbeit mit Warteschlangen und Themen zu autorisieren, müssen Sie [die Konfiguration Ihres Brokers bearbeiten](amazon-mq-creating-applying-configurations.md). Amazon MQ verwendet zum Einschränken des Lese- und Schreibzugriffs auf Ziele das [Simple Authentication Plugin](http://activemq.apache.org/security.html#Security-SimpleAuthenticationPlugin) von ActiveMQ. Weitere Informationen und Beispiele finden Sie unter [Immer eine Autorisierungszuordnung konfigurieren](using-amazon-mq-securely.md#always-configure-authorization-map) und `authorizationEntry`.

**Anmerkung**  
Derzeit unterstützt Amazon MQ keine Clientzertifikat-Authentifizierung.

**Topics**
+ [Integrieren von LDAP mit ActiveMQ](#integrate-ldap)
+ [Voraussetzungen](#ldap-prerequisites)
+ [Erste Schritte mit LDAP](#ldap-get-started)
+ [Funktionsweise der LDAP-Integration](#ldap-support-details)

## Integrieren von LDAP mit ActiveMQ
<a name="integrate-ldap"></a>

Sie können Amazon MQ Benutzer über die Anmeldeinformationen authentifizieren, die in Ihrem LDAP-Server (Lightweight Directory Access Protocol) gespeichert sind. Außerdem können Sie Amazon-MQ-Benutzer hinzufügen, löschen und ändern und Themen und Warteschlangen Berechtigungen zuweisen. Verwaltungsvorgänge wie das Erstellen, Aktualisieren und Löschen von Brokern erfordern weiterhin IAM-Anmeldeinformationen und sind nicht in LDAP integriert.

Kunden, die ihre Amazon-MQ-Broker-Authentifizierung und -Autorisierung mithilfe eines LDAP-Servers vereinfachen und zentralisieren möchten, können diese Funktion nutzen. Das Speichern aller Benutzeranmeldeinformationen auf dem LDAP-Server spart Zeit und Aufwand, da ein zentraler Speicherort für die Speicherung und Verwaltung dieser Anmeldeinformationen bereitgestellt wird.

Amazon MQ bietet LDAP-Unterstützung mit dem Apache-ActiveMQ-JAAS-Plugin. Alle vom Plugin unterstützten LDAP-Server wie Microsoft Active Directory oder OpenLDAP werden ebenfalls von Amazon MQ unterstützt. Weitere Informationen zum Plugin finden Sie unter dem Abschnitt [Sicherheit](https://activemq.apache.org/security) in der Active-MQ-Dokumentation.

Zusätzlich zu Benutzern können Sie den Zugriff auf Themen und Warteschlangen für eine bestimmte Gruppe oder einen Benutzer über Ihren LDAP-Server festlegen. Dazu erstellen Sie Einträge, die Themen und Warteschlangen auf Ihrem LDAP-Server darstellen und dann Berechtigungen einem bestimmten LDAP-Benutzer oder einer Gruppe zuweisen. Anschließend können Sie den Broker so konfigurieren, dass er Autorisierungsdaten vom LDAP-Server abruft.

**Wichtig**  
 Bei der Verwendung von LDAP wird bei der Authentifizierung nicht zwischen Groß- und Kleinschreibung unterschieden, bei der Autorisierung wird jedoch zwischen Groß- und Kleinschreibung für Ihren Benutzernamen unterschieden. 

## Voraussetzungen
<a name="ldap-prerequisites"></a>

Bevor Sie LDAP-Support zu einem neuen oder vorhandenen Amazon-MQ-Broker hinzufügen, müssen Sie ein Service-Konto einrichten. Dieses Servicekonto ist erforderlich, um eine Verbindung zu einem LDAP-Server herzustellen und muss über die richtigen Berechtigungen verfügen, um diese Verbindung herzustellen. Dieses Dienstkonto richtet die LDAP-Authentifizierung für Ihren Broker ein. Alle aufeinanderfolgenden Clientverbindungen werden über dieselbe Verbindung authentifiziert. 

Ein Servicekonto ist ein Konto auf Ihrem LDAP-Server, das eine Verbindung initiieren kann. Es handelt sich um eine standardmäßige LDAP-Anforderung, und Sie müssen die Anmeldeinformationen des Servicekontos nur einmal angeben. Nachdem die Verbindung eingerichtet wurde, werden alle zukünftigen Clientverbindungen über Ihren LDAP-Server authentifiziert. Ihre Anmeldeinformationen für das Dienstkonto werden sicher in verschlüsselter Form gespeichert, auf die nur Amazon MQ zugegriffen werden kann.

Für die Integration mit ActiveMQ ist eine bestimmte Directory Information Tree (DIT) auf dem LDAP-Server erforderlich. Eine beispielshafte `ldif`-Datei, die diese Struktur deutlich zeigt, finden Sie unter*Importieren Sie die folgende LDIF-Datei in den LDAP-Server* im Abschnitt [Sicherheit](https://activemq.apache.org/security) in der ActiveMQ-Dokumentation.

## Erste Schritte mit LDAP
<a name="ldap-get-started"></a>

Um zu beginnen, navigieren Sie zur Amazon MQ Konsole und wählen Sie **LDAP-Authentifizierung und -Autorisierung**, wenn Sie eine neue Amazon MQ erstellen oder eine vorhandene Broker-Instance bearbeiten.

Geben Sie die folgenden Informationen zum Servicekonto ein:
+ **Vollqualifizierter Domänenname** Der Speicherort des LDAP-Servers, an den Authentifizierungs- und Autorisierungsanforderungen ausgegeben werden sollen.
**Anmerkung**  
Der vollqualifizierte Domänenname des von Ihnen angegebenen LDAP-Servers darf nicht das Protokoll oder die Portnummer enthalten. Amazon MQ wird dem vollqualifizierten Domänennamen das Protokoll `ldaps` vorangestellt, und fügt die Portnummer `636` hinzu.  
Wenn Sie beispielsweise die folgende vollqualifizierte Domäne angeben: `example.com`, greift Amazon MQ über die folgende URL auf Ihren LDAP-Server zu: `ldaps://example.com:636`.  
Damit der Brokerhost erfolgreich mit dem LDAP-Server kommunizieren kann, muss der vollqualifizierte Domänenname öffentlich aufgelöst werden. Um den LDAP-Server privat und sicher zu halten, beschränken Sie den eingehenden Datenverkehr in den eingehenden Regeln des Servers, so dass nur Datenverkehr zugelassen wird, der aus der VPC des Brokers stammt.
+ **Benutzername für Service-Konto** Der definierte Name des Benutzers, der verwendet wird, um die anfängliche Bindung an den LDAP-Server durchzuführen.
+ **Passwort des Service-Kontos** Das Passwort des Benutzers, der die anfängliche Bindung ausführt.

In der folgenden Abbildung wird hervorgehoben, wo diese Details angegeben werden sollen.

![\[Geben Sie die Details des LDAP-Dienstkontos an.\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/active-mq-ldap-service-account.png)


In der **Konfiguration der LDAP-Anmeldung** geben Sie die folgenden erforderlichen Informationen ein:
+ **Benutzerbasis** Der definierte Name des Knotens im Directory Information Tree (DIT, Verzeichnisinformationsbaum), der nach Benutzern durchsucht werden soll.
+ **Benutzer-Suchabgleich** Der LDAP-Suchfilter, der für die Suche nach Benutzern innerhalb der `userBase` verwendet wird. Der Benutzername des Kunden wird im Suchfilter mit dem Platzhalter `{0}` ersetzt. Weitere Informationen erhalten Sie unter [Authentifizierung](#ldap-authentication) und [Autorisierung](#ldap-authorization).
+ **Rollenbasis** Der definierte Name des Knotens im DIT, der nach Rollen durchsucht werden soll. Rollen können als explizite LDAP-Gruppeneinträge in Ihrem Verzeichnis konfiguriert werden. Ein typischer Rolleneintrag kann aus einem Attribut für den Namen der Rolle bestehen, z. B. **common name (CN, allgemeiner Name)** und ein anderes Attribut, wie `member`, mit Werten, die die definierten Namen oder Benutzernamen der Benutzer der Rollengruppe darstellen. Zum Beispiel, angesichts der Organisationseinheit, `group`, können Sie den folgenden definierten Namen angeben: `ou=group,dc=example,dc=com`.
+ **Rollen-Suchabgleich** Der LDAP-Suchfilter, der zum Suchen von Rollen innerhalb der `roleBase` verwendet wird. Der definierte Name des Benutzers, der mit `userSearchMatching` übereinstimmt, wird mit dem Platzhalter `{0}` im Suchfilter ersetzt. Der Benutzername des Kunden wird anstelle des `{1}`-Platzhalters eingesetzt. Wenn Rolleneinträge in Ihrem Verzeichnis beispielsweise ein Attribut mit dem Namen `member` enthalten, das die Benutzernamen für alle Benutzer in dieser Rolle enthält, können Sie den folgenden Suchfilter bereitstellen: `(member:=uid={1})`.

 In der folgenden Abbildung wird hervorgehoben, wo diese Details angegeben werden sollen.

![\[Wo LDAP-Anmeldedaten angegeben werden sollen.\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/active-mq-ldap-login-configuration.png)


Im Abschnitt **Optionale Einstellungen** können Sie die folgenden optionalen Informationen angeben:
+ **Benutzerrollen-Name** Der Name des LDAP-Attributs im Verzeichniseintrag des Benutzers für die Gruppenmitgliedschaft des Benutzers. In einigen Fällen können Benutzerrollen durch den Wert eines Attributs im Verzeichniseintrag des Benutzers identifiziert werden. Mit der `userRoleName`-Option können Sie den Namen dieses Attributs angeben. Betrachten wir beispielsweise den folgenden Benutzereintrag:

  ```
  dn: uid=jdoe,ou=user,dc=example,dc=com
  objectClass: user
  uid: jdoe
  sn: jane
  cn: Jane Doe
  mail: j.doe@somecompany.com
  memberOf: role1
  userPassword: password
  ```

  Um für das obige Beispiel den richtigen `userRoleName` bereitzustellen, würden Sie das `memberOf`-Attribut angeben. Wenn die Authentifizierung erfolgreich ist, wird dem Benutzer die `role1`-Rolle zugewiesen.
+ **Rollenname** Das Gruppennamen-Attribut in einem Rolleneintrag, dessen Wert der Name dieser Rolle ist. Sie können beispielsweise `cn` für einen **allgemeinen Namen eines Gruppeneintrags** angeben. Wenn die Authentifizierung erfolgreich ist, wird dem Benutzer der Wert des Attributs `cn` für jeden Rolleneintrag zugewiesen, bei dem er Mitglied ist.
+ Der **Teilbaum Benutzersuche** Definiert den Bereich für die LDAP-Benutzersuchabfrage. Wenn true, wird der Bereich so eingestellt, dass der gesamte Teilbaum unter dem Knoten durchsucht wird, der durch `userBase` definiert ist.
+ Der **Teilbaum Rollensuche** Definiert den Bereich für die LDAP-Rollensuchabfrage. Wenn true, wird der Bereich so eingestellt, dass der gesamte Teilbaum unter dem Knoten durchsucht wird, der durch `roleBase` definiert wird.

In der folgenden Abbildung wird hervorgehoben, wo diese optionalen Einstellungen festgelegt werden sollen.

![\[Optional settings for LDAP attributes and search scope in role search matching.\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/amazon-mq-active-ldap-optional-settings.png)


## Funktionsweise der LDAP-Integration
<a name="ldap-support-details"></a>

Sie können sich die Integration in zwei Hauptkategorien vorstellen: die Struktur für die Authentifizierung und die Struktur für die Autorisierung.

### Authentifizierung
<a name="ldap-authentication"></a>

Für die Authentifizierung müssen Clientanmeldeinformationen gültig sein. Diese Anmeldeinformationen werden für Benutzer in der Benutzerbasis auf dem LDAP-Server validiert.

Die Benutzerbasis, die dem ActiveMQ-Broker bereitgestellt wird, muss auf den Knoten im DIT verweisen, auf dem Benutzer auf dem LDAP-Server gespeichert sind. Wenn Sie beispielsweise die Domänenkomponenten AWS Managed Microsoft AD, und `corp``example`, verwenden und `com` innerhalb dieser Organisationseinheiten `corp` vorhanden sind`Users`, würden Sie Folgendes als Benutzerbasis verwenden:

```
OU=Users,OU=corp,DC=corp,DC=example,DC=com
```

Der ActiveMQ-Broker würde an diesem Speicherort im DIT nach Benutzern suchen, um Client-Verbindungsanforderungen an den Broker zu authentifizieren.

![\[Suchen nach Benutzern\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/active-mq-ldap-structure.png)


Da der ActiveMQ-Quellcode den Attributnamen für Benutzer zu `uid` festcodiert, müssen Sie sicherstellen, dass für jeden Benutzer dieses Attribut festgelegt ist. Der Einfachheit halber können Sie den Verbindungsbenutzernamen des Benutzers verwenden. Weitere Informationen finden Sie im [ativemq](https://github.com/apache/activemq/blob/c3d9b388e4f1fe73e348bf466122fe6862e064a0/activemq-broker/src/main/java/org/apache/activemq/security/SimpleCachedLDAPAuthorizationMap.java#L89)-Quellcode und [Konfigurieren von ID-Zuweisungen in Active-Directory-Benutzer und -Computer für Windows Server 2016 (und nachfolgenden) Versionen](https://www.ibm.com/support/knowledgecenter/en/STXKQY_5.0.3/com.ibm.spectrum.scale.v5r03.doc/bl1adm_confidmapaduc.htm).

Um den ActiveMQ-Konsolenzugriff für bestimmte Benutzer zu aktivieren, stellen Sie sicher, dass sie zur `amazonmq-console-admins`-Gruppe gehören.

### Autorisierung
<a name="ldap-authorization"></a>

Für die Autorisierung werden Berechtigungen Suchbasen in der Broker-Konfiguration angegeben. Die Autorisierung erfolgt pro Ziel (oder Platzhalter, Zielsatz) über das `cachedLdapAuthorizationMap`-Element, das sich in der `activemq.xml`-Konfigurationsdatei des Brokers befindet. Weitere Informationen finden Sie unter [Zwischengespeichertes LDAP-Autorisierungsmodul](https://activemq.apache.org/cached-ldap-authorization-module).

**Anmerkung**  
Um das `cachedLDAPAuthorizationMap` Element in der `activemq.xml` Konfigurationsdatei Ihres Brokers verwenden zu können, müssen Sie die Option **LDAP-Authentifizierung und Autorisierung** wählen, wenn Sie [eine Konfiguration über die erstellen AWS-Managementkonsole, oder die](amazon-mq-creating-applying-configurations.md) Option [zum Erstellen einer Konfiguration über die festlegen oder die [https://docs.aws.amazon.com//amazon-mq/latest/api-reference/configurations.html#configurations-model-authenticationstrategy](https://docs.aws.amazon.com//amazon-mq/latest/api-reference/configurations.html#configurations-model-authenticationstrategy)](amazon-mq-creating-applying-configurations.md)Eigenschaft auf setzen AWS-Managementkonsole, `LDAP` wenn Sie eine neue Konfiguration mit der Amazon MQ MQ-API erstellen.

Sie müssen die folgenden drei Attribute im Rahmen des `cachedLDAPAuthorizationMap`-Elements bereitstellen:
+ `queueSearchBase`
+ `topicSearchBase`
+ `tempSearchBase`

**Wichtig**  
Um zu verhindern, dass vertrauliche Informationen direkt in der Konfigurationsdatei des Brokers platziert werden, blockiert Amazon MQ die folgenden Attribute in`cachedLdapAuthorizationMap`:  
`connectionURL`
`connectionUsername`
`connectionPassword`
Wenn Sie einen Broker erstellen, ersetzt Amazon MQ die oben genannten Attribute durch die Werte AWS-Managementkonsole, die Sie über die oder in der [https://docs.aws.amazon.com//amazon-mq/latest/api-reference/brokers.html#brokers-prop-createbrokerinput-ldapservermetadata](https://docs.aws.amazon.com//amazon-mq/latest/api-reference/brokers.html#brokers-prop-createbrokerinput-ldapservermetadata)Eigenschaft Ihrer API-Anfrage angeben.

Das folgende Beispiel illustriert die Verwendung von Verschiebungen.

```
<authorizationPlugin>
    <map>
        <cachedLDAPAuthorizationMap
            queueSearchBase="ou=Queue,ou=Destination,ou=corp,dc=corp,dc=example,dc=com"
            topicSearchBase="ou=Topic,ou=Destination,ou=corp,dc=corp,dc=example,dc=com"
            tempSearchBase="ou=Temp,ou=Destination,ou=corp,dc=corp,dc=example,dc=com"
            refreshInterval="300000"
            legacyGroupMapping="false"
        />
    </map>
</authorizationPlugin>
```

Diese Werte geben die Speicherorte innerhalb des DIT an, an denen Berechtigungen für jeden Zieltyp angegeben werden. Für das obige Beispiel mit AWS Managed Microsoft AD der Verwendung derselben Domänenkomponenten von`corp`, `example` und würden Sie also eine Organisationseinheit angeben`com`, die so benannt ist, dass `destination` sie all Ihre Zieltypen enthält. Innerhalb dieser Organisationseinheit würden Sie jeweils eine für die Ziele `queues`, `topics` und `temp` erstellen.

Dies würde bedeuten, dass Ihre Warteschlangen-Suchbasis, die Autorisierungsinformationen für Ziele vom Typ Warteschlange bereitstellt, den folgenden Speicherort in Ihrem DIT hat:

```
OU=Queue,OU=Destination,OU=corp,DC=corp,DC=example,DC=com
```

![\[Speicherort der Warteschlangen-Suche.\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/active-mq-ldap-queue-structure.png)


Ebenso würden Berechtigungsregeln für Themen und temporäre Ziele auf der gleichen Ebene im DIT liegen: 

```
OU=Topic,OU=Destination,OU=corp,DC=corp,DC=example,DC=com
OU=Temp,OU=Destination,OU=corp,DC=corp,DC=example,DC=com
```

Innerhalb der Organisationseinheit für jeden Zieltyp (Warteschlange, Thema, Temp) kann entweder ein Platzhalter oder ein bestimmter Zielname angegeben werden. Um beispielsweise eine Autorisierungsregel für alle Warteschlangen bereitzustellen, die mit dem Präfix DEMO.EVENTS.\$1 beginnen, können Sie die folgende Organisationseinheit erstellen:

```
OU=DEMO.EVENTS.$,OU=Queue,OU=Destination,OU=corp,DC=corp,DC=example,DC=com
```

**Anmerkung**  
Die `DEMO.EVENTS.$`-Organisationseinheit befindet sich innerhalb der `Queue`-Organisationseinheit.

Weitere Informationen zu Platzhaltern in ActiveMQ finden Sie unter [Platzhalter](https://activemq.apache.org/wildcards)

Um Autorisierungsregeln für bestimmte Warteschlangen wie DEMO.MYQUEUE bereitzustellen, geben Sie Folgendes an:

```
OU=DEMO.MYQUEUE,OU=Queue,OU=Destination,OU=corp,DC=corp,DC=example,DC=com
```

![\[Autorisierungsregeln für bestimmte Warteschlangen\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/active-mq-ldap-authorization-rules.png)


### Sicherheitsgruppen
<a name="ldap-security-groups"></a>

Innerhalb jeder Organisationseinheit, die ein Ziel oder einen Platzhalter darstellt, müssen Sie drei Sicherheitsgruppen erstellen. Wie bei allen Berechtigungen in ActiveMQ handelt es sich auch hier read/write/admin um Berechtigungen. Weitere Informationen zu den Funktionen der einzelnen Berechtigungen eines Benutzers finden Sie unter [Sicherheit](https://activemq.apache.org/security) in der ActiveMQ-Dokumentation.

Sie müssen diese Sicherheitsgruppen `read`, `write` und `admin` benennen. Innerhalb jeder dieser Sicherheitsgruppen können Sie Benutzer oder Gruppen hinzufügen, die dann über die Berechtigung zum Ausführen der zugehörigen Aktionen verfügen. Sie benötigen diese Sicherheitsgruppen für jede Platzhalterzielgruppe oder jedes einzelne Ziel. 

![\[Sicherheitsgruppen\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/active-mq-ldap-security-groups.png)


**Anmerkung**  
Wenn Sie die Admin-Gruppe erstellen, entsteht ein Konflikt mit dem Gruppennamen. Dieser Konflikt tritt auf, weil die Legacy-Regeln vor Windows 2000 nicht zulassen, dass Gruppen denselben Namen verwenden, selbst wenn sich die Gruppen an unterschiedlichen Speicherorten des DIT befinden. Der Wert in dem Dialogfeld **pre-Windows 2000** hat keine Auswirkungen auf die Einrichtung, muss jedoch global eindeutig sein. Um diesen Konflikt zu vermeiden, können Sie ein `uuid`-Suffix jeder `admin`-Gruppe anknüpfen.  

![\[Dies ist mein Image.\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/active-mq-ldap-admin-qualifier.png)


Hinzufügen eines Benutzers zur `admin`-Sicherheitsgruppe für ein bestimmtes Ziel ermöglicht es dem Benutzer, dieses Thema zu erstellen und zu löschen. Sie zur `read`-Sicherheitsgruppe hinzuzufügen ermöglicht es ihnen, vom Ziel zu lesen und sie der `write`-Gruppe hinzuzufügen ermöglicht es ihnen, an das Ziel zu schreiben.

Zusätzlich zum Hinzufügen einzelner Benutzer zu Sicherheitsgruppen-Berechtigungen können Sie auch ganze Gruppen hinzufügen. Da ActiveMQ jedoch wieder Attributnamen für Gruppen festcodiert, müssen Sie sicherstellen, dass die Gruppe, die Sie hinzufügen möchten, die Objektklasse `groupOfNames` hat, wie im [activemq](https://github.com/apache/activemq/blob/c3d9b388e4f1fe73e348bf466122fe6862e064a0/activemq-broker/src/main/java/org/apache/activemq/security/SimpleCachedLDAPAuthorizationMap.java#L86)-Quellcode beschrieben.

Führen Sie dazu den gleichen Prozess aus wie bei der `uid` für Benutzer. Siehe [Konfigurieren von ID-Zuweisungen in Active-Directory-Benutzern und Computer für Windows Server 2016 (und nachfolgenden) Versionen](https://www.ibm.com/support/knowledgecenter/en/STXKQY_5.0.3/com.ibm.spectrum.scale.v5r03.doc/bl1adm_confidmapaduc.htm).

## Schritt 3: (Optional) Connect zu einer AWS Lambda Funktion herstellen
<a name="activemq-connect-to-lambda"></a>

 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](https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html), der Nachrichten aus einer Warteschlange liest und die Funktion[synchron](https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html). 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](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) Ihrer Lambda-Funktion hinzu.
   + [mq: DescribeBroker](https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers-broker-id.html#brokers-broker-id-http-methods)
   + [ec2: CreateNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)
   + [ec2: DeleteNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteNetworkInterface.html)
   + [ec2: DescribeNetworkInterfaces](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)
   + [ec2: DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html)
   + [ec2: DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html)
   + [ec2: DescribeVpcs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html)
   + [Logs: CreateLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html)
   + [Protokolle: CreateLogStream](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html)
   + [Protokolle: PutLogEvents](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html)
   + [Verwalter von Geheimnissen: GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
**Anmerkung**  
Ohne die erforderlichen IAM-Berechtigungen ist Ihre Funktion nicht in der Lage, Datensätze aus Amazon MQ Ressourcen erfolgreich zu lesen.

1.  (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 unter[Internet- und Servicezugriff für VPC-verbundene Funktionen](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-internet)im*AWS 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 unter[Konfigurieren von Schnittstellen-VPC-Endpunkten für Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc-endpoints.html)im*AWS Lambda Entwicklerhandbuch*. 

1.  [Konfigurieren Sie Ihren Broker als Ereignisquelle](https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-eventsourcemapping)Verwendung für eine Lambda -Funktion unter Verwendung der AWS-Managementkonsole. Sie können den Befehl auch verwenden. [https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html) AWS Command Line Interface 

1.  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-Nutzlast für eine Warteschlange in Amazon MQ für RabbitMQ. 
**Anmerkung**  
 Im Beispiel ist `testQueue` der Name der Warteschlange. 

   ```
   {
     "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.rproxy.govskope.us-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.rproxy.govskope.us-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
         }
       ]
     }
   }
   ```

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](https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html) im *AWS Lambda -Entwicklerhandbuch*.

# Einen ActiveMQ-Broker-Benutzer erstellen
<a name="amazon-mq-listing-managing-users"></a>

Ein ActiveMQ*Benutzer*ist eine Person oder eine Anwendung, die auf die Warteschlangen und Themen eines ActiveMQ -Brokers zugreifen kann. Sie können Benutzer so konfigurieren, dass sie bestimmte Berechtigungen haben. Beispielsweise können Sie einigen Benutzern erlauben, auf die[ActiveMQ-Webkonsole](http://activemq.apache.org/web-console.html) zuzugreifen.

Eine *Gruppe*ist ein semantisches Label. Sie können einem Benutzer eine Gruppe zuweisen und Berechtigungen für Gruppen zum Senden, Empfangen von und Verwalten bestimmter Warteschlangen und Themen konfigurieren.

**Anmerkung**  
Sie können Gruppen nicht unabhängig von Benutzern konfigurieren. Eine Gruppenbezeichnung wird erstellt, wenn Sie mindestens einen Benutzer hinzufügen und gelöscht, wenn Sie alle Benutzer daraus entfernen.

**Anmerkung**  
 Die `activemq-webconsole` Gruppe in ActiveMQ auf Amazon MQ hat Administratorberechtigungen für alle Warteschlangen und Themen. Alle Benutzer in dieser Gruppe haben Administratorzugriff. 

Die folgenden Beispiele zeigen, wie Sie Amazon MQ-Broker-Benutzer mithilfe der AWS-Managementkonsole erstellen, bearbeiten und löschen können.

## Erstellen Sie einen neuen ActiveMQ-Broker-Benutzer
<a name="create-new-user-console"></a>

1. Melden Sie sich bei der [Amazon-MQ-Konsole](https://console.aws.amazon.com/amazon-mq/) an.

1. Wählen Sie in der Brokerliste den Namen Ihres Brokers aus (z. B. **MyBroker**) und wählen Sie dann Details **anzeigen** aus.

   Auf der ***MyBroker***Seite werden im Bereich **Benutzer** alle Benutzer dieses Brokers aufgelistet.  
![\[Table showing two users with their console access and group information.\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-list-users.png)

1. Wählen Sie **Create user** (Benutzer erstellen) aus.

1. Geben Sie in das Dialogfeld **Create user** (Benutzer erstellen) einen **Benutzernamen** und ein **Kennwort** ein.

1. (Optional) Geben Sie durch Kommas voneinander getrennt die Namen der Gruppen ein, denen der Benutzer angehört (z. B.: `Devs, Admins`).

1. (Optional) Um dem Benutzer zu ermöglichen, auf die [ActiveMQ-Webkonsole](http://activemq.apache.org/web-console.html) zuzugreifen, wählen Sie **ActiveMQ Web Console**.

1. Wählen Sie **Create user** (Benutzer erstellen) aus.
**Wichtig**  
Das Vornehmen von Änderungen an einem Benutzer wendet *nicht* sofort die Änderungen auf den Benutzer an. Um Ihre Änderungen zu übernehmen, müssen Sie auf den nächsten Wartungszeitraum warten oder [den Broker neu starten](amazon-mq-rebooting-broker.md).

# Einen ActiveMQ-Broker-Benutzer bearbeiten
<a name="edit-existing-user-console"></a>

 Gehen Sie wie folgt vor, um einen vorhandenen Benutzer zu bearbeiten: 

1. Melden Sie sich bei der [Amazon-MQ-Konsole](https://console.aws.amazon.com/amazon-mq/) an.

1. Wählen Sie in der Brokerliste den Namen Ihres Brokers aus (z. B. **MyBroker**) und wählen Sie dann **Details anzeigen** aus.

   Auf der ***MyBroker***Seite werden im Bereich **Benutzer** alle Benutzer dieses Brokers aufgelistet.  
![\[Table showing two users with their console access and group information.\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-list-users.png)

1. Wählen Sie Ihre Anmeldeinformationen und dann **Bearbeiten** aus.

   Das Dialogfeld **Edit user (Benutzer bearbeiten)** wird angezeigt.

1. (Optional) Geben Sie ein neues **Kennwort** ein.

1. (Optional) Fügen Sie die durch Kommas voneinander getrennten Namen der Gruppen, denen der Benutzer angehört, hinzu oder entfernen Sie sie (z. B.: `Managers, Admins`).

1. (Optional) Um dem Benutzer zu ermöglichen, auf die [ActiveMQ-Webkonsole](http://activemq.apache.org/web-console.html) zuzugreifen, wählen Sie **ActiveMQ Web Console**.

1. Um die Änderungen am Benutzer zu speichern, wählen Sie **Done (Fertig)** aus.
**Wichtig**  
Das Vornehmen von Änderungen an einem Benutzer wendet *nicht* sofort die Änderungen auf den Benutzer an. Um Ihre Änderungen zu übernehmen, müssen Sie auf den nächsten Wartungszeitraum warten oder [den Broker neu starten](amazon-mq-rebooting-broker.md).

# Löschen Sie einen ActiveMQ-Broker-Benutzer
<a name="delete-existing-user-console"></a>

 Wenn Sie einen Benutzer nicht mehr benötigen, können Sie ihn löschen. 

1. Melden Sie sich bei der [Amazon-MQ-Konsole](https://console.aws.amazon.com/amazon-mq/) an.

1. Wählen Sie in der Brokerliste den Namen Ihres Brokers aus (z. B. **MyBroker**) und wählen Sie dann **Details anzeigen** aus.

   Auf der ***MyBroker***Seite werden im Bereich **Benutzer** alle Benutzer dieses Brokers aufgelistet.  
![\[Table showing two users with their console access and group information.\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-list-users.png)

1. Wählen Sie Ihre Anmeldedaten aus (z. B. ***MyUser***) und wählen Sie dann **Löschen**.

1. Um das Löschen des Benutzers zu bestätigen, klicken **Sie auf Löschen? *MyUser*** Wählen Sie im Dialogfeld **Löschen** aus.
**Wichtig**  
Das Vornehmen von Änderungen an einem Benutzer wendet *nicht* sofort die Änderungen auf den Benutzer an. Um Ihre Änderungen zu übernehmen, müssen Sie auf den nächsten Wartungszeitraum warten oder [den Broker neu starten](amazon-mq-rebooting-broker.md).

# Funktionierende Beispiele für die Verwendung von Java Message Service (JMS) mit ActiveMQ
<a name="amazon-mq-working-java-example"></a>

Die folgenden Beispiele zeigen, wie Sie programmgesteuert mit ActiveMQ arbeiten können:
+ Der OpenWire Java-Beispielcode stellt eine Verbindung zu einem Broker her, erstellt eine Warteschlange und sendet und empfängt eine Nachricht. Eine detaillierte Aufschlüsselung und Erläuterung finden Sie unter [Verbinden einer Java-Anwendung mit Ihrem Amazon MQ-Broker](amazon-mq-connecting-application.md).
+ Mit dem MQTT Java-Beispielcode wird eine Verbindung zu einem Broker hergestellt, eine Warteschlange erstellt und eine Nachricht gesendet und empfangen.
+ Der Java-Beispielcode für STOMP\$1WSS stellt eine Verbindung zu einem Broker her, erstellt eine Warteschlange und veröffentlicht und empfängt eine Nachricht.

## Voraussetzungen
<a name="quick-start-prerequisites"></a>

### Aktivieren der VPC-Attribute
<a name="quick-start-enable-vpc-attributes"></a>

Um sicherzustellen, dass Ihr Broker innerhalb Ihrer VPC zugänglich ist, müssen Sie die`enableDnsHostnames`und`enableDnsSupport`VPC Attribute Weitere Informationen finden Sie unter [DNS-Support in Ihrer VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support) im *Amazon-VPC-Benutzerhandbuch*.

### Eingehende Verbindungen aktivieren
<a name="quick-start-allow-inbound-connections"></a>

 Um programmgesteuert mit Amazon MQ arbeiten zu können, müssen Sie eingehende Verbindungen verwenden. 

1. Melden Sie sich bei der [Amazon-MQ-Konsole](https://console.aws.amazon.com/amazon-mq/) an.

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

1. Notieren Sie sich auf der ***MyBroker***Seite im Abschnitt **Verbindungen** die Adressen und Ports der Webkonsolen-URL und der Wire-Level-Protokolle des Brokers.

1. Wählen Sie im Abschnitt **Details** unter **Sicherheit und Netzwerk** den Namen Ihrer Sicherheitsgruppe oder ![\[Pencil icon indicating an edit or modification action.\]](http://docs.aws.amazon.com/de_de/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-broker-details-link.png).

   Die Seite **Security Groups** (Sicherheitsgruppen) des EC2-Dashboards wird angezeigt.

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

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

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

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

   1. Für **Port-Bereich**, geben Sie den Port der Webkonsole ein (`8162`).

   1. Für **Source** (Quelle), lassen Sie **Custom** (Benutzerdefiniert) ausgewählt, und geben Sie dann die IP-Adresse des Systems ein, auf das auf die Webkonsole zugegriffen werden soll (z. B. `192.0.2.1`) enthalten.

   1. Wählen Sie **Save**.

      Ihr Broker kann nun eingehende Verbindungen akzeptieren.

### Java-Abhängigkeiten hinzufügen
<a name="quick-start-java-dependencies"></a>

------
#### [ OpenWire ]

Fügen Sie dem Pfad für Ihre Java-Build-Klasse die Pakete `activemq-client.jar` und `activemq-pool.jar`hinzu. Das folgende Beispiel zeigt diese Abhängigkeiten in der `pom.xml`-Datei eines Maven-Projekts.

```
<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>
```

Weitere Informationen über `activemq-client.jar` finden Sie unter [Ursprüngliche Konfiguration](http://activemq.apache.org/initial-configuration.html) in der Apache ActiveMQ-Dokumentation.

------
#### [ MQTT ]

Fügen Sie dem Pfad für Ihre Java-Klasse das `org.eclipse.paho.client.mqttv3.jar`-Pakete hinzu. Das folgende Beispiel zeigt diese Abhängigkeit in der `pom.xml`-Datei eines Maven-Projekts.

```
<dependencies>
                    <dependency>
                        <groupId>org.eclipse.paho</groupId>
                        <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
                        <version>1.2.0</version>
                    </dependency>                               
                    </dependencies>
```

Weitere Informationen zu `org.eclipse.paho.client.mqttv3.jar` finden Sie unter [Eclipse Paho-Java-Client](https://www.eclipse.org/paho/clients/java/).

------
#### [ STOMP\$1WSS ]

Fügen Sie die folgenden Pakete zu Ihrem Java-Klassenpfad hinzu:
+ `spring-messaging.jar`
+ `spring-websocket.jar`
+ `javax.websocket-api.jar`
+ `jetty-all.jar`
+ `slf4j-simple.jar`
+ `jackson-databind.jar`

Das folgende Beispiel zeigt diese Abhängigkeiten in der `pom.xml`-Datei eines Maven-Projekts.

```
<dependencies>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-messaging</artifactId>
                        <version>5.0.5.RELEASE</version>
                    </dependency>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-websocket</artifactId>
                        <version>5.0.5.RELEASE</version>
                    </dependency>
                    <dependency>
                        <groupId>javax.websocket</groupId>
                        <artifactId>javax.websocket-api</artifactId>
                        <version>1.1</version>
                    </dependency>
                    <dependency>
                        <groupId>org.eclipse.jetty.aggregate</groupId>
                        <artifactId>jetty-all</artifactId>
                        <type>pom</type>
                        <version>9.3.3.v20150827</version>
                    </dependency>
                    <dependency>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-simple</artifactId>
                        <version>1.6.6</version>
                    </dependency>
                    <dependency>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>jackson-databind</artifactId>
                        <version>2.5.0</version>
                    </dependency>
                    </dependencies>
```

Weitere Informationen finden Sie unter [STOMP-Unterstützung](https://docs.spring.io/spring-integration/docs/5.0.5.RELEASE/reference/html/stomp.html) in der Spring Framework-Dokumentation.

------

## MQExampleAmazon.java
<a name="working-java-example"></a>

**Wichtig**  
Im folgenden Beispielcode laufen Hersteller und Verbraucher in einem einzigen Thread. Stellen Sie für Produktionssysteme (oder zum Testen des Failovers von Broker-Instances) sicher, dass Ihre Produzenten und Verbraucher auf separaten Hosts oder Threads ausgeführt werden.

------
#### [ OpenWire ]

```
/*
 * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  https://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 *
 */
                    
                    import org.apache.activemq.ActiveMQConnectionFactory;
                    import org.apache.activemq.jms.pool.PooledConnectionFactory;
                    
                    import javax.jms.*;
                    
                    public class AmazonMQExample {
                    
                    // Specify the connection parameters.
                    private final static String WIRE_LEVEL_ENDPOINT 
                            = "ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617";
                    private final static String ACTIVE_MQ_USERNAME = "MyUsername123";
                    private final static String ACTIVE_MQ_PASSWORD = "MyPassword456";
                    
                    public static void main(String[] args) throws JMSException {
                        final ActiveMQConnectionFactory connectionFactory =
                                createActiveMQConnectionFactory();
                        final PooledConnectionFactory pooledConnectionFactory =
                                createPooledConnectionFactory(connectionFactory);
                    
                        sendMessage(pooledConnectionFactory);
                        receiveMessage(connectionFactory);
                    
                        pooledConnectionFactory.stop();
                    }
                    
                    private static void
                    sendMessage(PooledConnectionFactory pooledConnectionFactory) throws JMSException {
                        // Establish a connection for the producer.
                        final Connection producerConnection = pooledConnectionFactory
                                .createConnection();
                        producerConnection.start();
                    
                        // 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);
                    
                        // Create a message.
                        final String text = "Hello from Amazon MQ!";
                        final TextMessage producerMessage = producerSession
                                .createTextMessage(text);
                    
                        // Send the message.
                        producer.send(producerMessage);
                        System.out.println("Message sent.");
                    
                        // Clean up the producer.
                        producer.close();
                        producerSession.close();
                        producerConnection.close();
                    }
                    
                    private static void
                    receiveMessage(ActiveMQConnectionFactory connectionFactory) throws JMSException {
                        // Establish a connection for the consumer.
                        // Note: Consumers should not use PooledConnectionFactory.
                        final Connection consumerConnection = connectionFactory.createConnection();
                        consumerConnection.start();
                    
                        // 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);
                    
                        // 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());
                    
                        // Clean up the consumer.
                        consumer.close();
                        consumerSession.close();
                        consumerConnection.close();
                    }
                    
                    private static PooledConnectionFactory
                    createPooledConnectionFactory(ActiveMQConnectionFactory connectionFactory) {
                        // Create a pooled connection factory.
                        final PooledConnectionFactory pooledConnectionFactory =
                                new PooledConnectionFactory();
                        pooledConnectionFactory.setConnectionFactory(connectionFactory);
                        pooledConnectionFactory.setMaxConnections(10);
                        return pooledConnectionFactory;
                    }
                    
                    private static ActiveMQConnectionFactory createActiveMQConnectionFactory() {
                        // Create a connection factory.
                        final ActiveMQConnectionFactory connectionFactory =
                                new ActiveMQConnectionFactory(WIRE_LEVEL_ENDPOINT);
                    
                        // Pass the sign-in credentials.
                        connectionFactory.setUserName(ACTIVE_MQ_USERNAME);
                        connectionFactory.setPassword(ACTIVE_MQ_PASSWORD);
                        return connectionFactory;
                    }
                    }
```

------
#### [ MQTT ]

```
/*
 * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  https://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 *
 */
                    
                    import org.eclipse.paho.client.mqttv3.*;
                    
                    public class AmazonMQExampleMqtt implements MqttCallback {
                    
                    // Specify the connection parameters.
                    private final static String WIRE_LEVEL_ENDPOINT =
                            "ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:8883";
                    private final static String ACTIVE_MQ_USERNAME = "MyUsername123";
                    private final static String ACTIVE_MQ_PASSWORD = "MyPassword456";
                    
                    public static void main(String[] args) throws Exception {
                        new AmazonMQExampleMqtt().run();
                    }
                    
                    private void run() throws MqttException, InterruptedException {
                    
                        // Specify the topic name and the message text.
                        final String topic = "myTopic";
                        final String text = "Hello from Amazon MQ!";
                    
                        // Create the MQTT client and specify the connection options.
                        final String clientId = "abc123";
                        final MqttClient client = new MqttClient(WIRE_LEVEL_ENDPOINT, clientId);
                        final MqttConnectOptions connOpts = new MqttConnectOptions();
                    
                        // Pass the sign-in credentials.
                        connOpts.setUserName(ACTIVE_MQ_USERNAME);
                        connOpts.setPassword(ACTIVE_MQ_PASSWORD.toCharArray());
                    
                        // Create a session and subscribe to a topic filter.
                        client.connect(connOpts);
                        client.setCallback(this);
                        client.subscribe("+");
                    
                        // Create a message.
                        final MqttMessage message = new MqttMessage(text.getBytes());
                    
                        // Publish the message to a topic.
                        client.publish(topic, message);
                        System.out.println("Published message.");
                    
                        // Wait for the message to be received.
                        Thread.sleep(3000L);
                    
                        // Clean up the connection.
                        client.disconnect();
                    }
                    
                    @Override
                    public void connectionLost(Throwable cause) {
                        System.out.println("Lost connection.");
                    }
                    
                    @Override
                    public void messageArrived(String topic, MqttMessage message) throws MqttException {
                        System.out.println("Received message from topic " + topic + ": " + message);
                    }
                    
                    @Override
                    public void deliveryComplete(IMqttDeliveryToken token) {
                        System.out.println("Delivered message.");
                    }
                    }
```

------
#### [ STOMP\$1WSS ]

```
/*
 * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  https://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 *
 */
                    
                    import org.springframework.messaging.converter.StringMessageConverter;
                    import org.springframework.messaging.simp.stomp.*;
                    import org.springframework.web.socket.WebSocketHttpHeaders;
                    import org.springframework.web.socket.client.WebSocketClient;
                    import org.springframework.web.socket.client.standard.StandardWebSocketClient;
                    import org.springframework.web.socket.messaging.WebSocketStompClient;
                    
                    import java.lang.reflect.Type;
                    
                    public class AmazonMQExampleStompWss {
                    
                    // Specify the connection parameters.
                    private final static String DESTINATION = "/queue";
                    private final static String WIRE_LEVEL_ENDPOINT =
                            "wss://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61619";
                    private final static String ACTIVE_MQ_USERNAME = "MyUsername123";
                    private final static String ACTIVE_MQ_PASSWORD = "MyPassword456";
                    
                    public static void main(String[] args) throws Exception {
                        final AmazonMQExampleStompWss example = new AmazonMQExampleStompWss();
                    
                        final StompSession stompSession = example.connect();
                        System.out.println("Subscribed to a destination using session.");
                        example.subscribeToDestination(stompSession);
                    
                        System.out.println("Sent message to session.");
                        example.sendMessage(stompSession);
                        Thread.sleep(60000);
                    }
                    
                    private StompSession connect() throws Exception {
                        // Create a client.
                        final WebSocketClient client = new StandardWebSocketClient();
                        final WebSocketStompClient stompClient = new WebSocketStompClient(client);
                        stompClient.setMessageConverter(new StringMessageConverter());
                    
                        final WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
                    
                        // Create headers with authentication parameters.
                        final StompHeaders head = new StompHeaders();
                        head.add(StompHeaders.LOGIN, ACTIVE_MQ_USERNAME);
                        head.add(StompHeaders.PASSCODE, ACTIVE_MQ_PASSWORD);
                    
                        final StompSessionHandler sessionHandler = new MySessionHandler();
                    
                        // Create a connection.
                        return stompClient.connect(WIRE_LEVEL_ENDPOINT, headers, head,
                                sessionHandler).get();
                    }
                    
                    private void subscribeToDestination(final StompSession stompSession) {
                        stompSession.subscribe(DESTINATION, new MyFrameHandler());
                    }
                    
                    private void sendMessage(final StompSession stompSession) {
                        stompSession.send(DESTINATION, "Hello from Amazon MQ!".getBytes());
                    }
                    
                    private static class MySessionHandler extends StompSessionHandlerAdapter {
                        public void afterConnected(final StompSession stompSession,
                                                final StompHeaders stompHeaders) {
                            System.out.println("Connected to broker.");
                        }
                    }
                    
                    private static class MyFrameHandler implements StompFrameHandler {
                        public Type getPayloadType(final StompHeaders headers) {
                            return String.class;
                        }
                    
                        public void handleFrame(final StompHeaders stompHeaders,
                                                final Object message) {
                            System.out.print("Received message from topic: " + message);
                        }
                    }
                    }
```

------