

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Tutorial RabbitMQ
<a name="rabbitmq-on-amazon-mq"></a>

I seguenti tutorial illustrano come configurare e utilizzare RabbitMQ su Amazon MQ. Per ulteriori informazioni sull'utilizzo delle librerie client supportate in diversi linguaggi di programmazione, ad esempio Node.js, Python, .NET e altri, vedere [Tutorial RabbitMQ](https://www.rabbitmq.com/getstarted.html) nella *Guida alle operazioni preliminari di RabbitMQ*.

**Topics**
+ [Modifica delle preferenze del broker](amazon-mq-rabbitmq-editing-broker-preferences.md)
+ [Utilizzo di Python Pika con Amazon MQ per RabbitMQ](amazon-mq-rabbitmq-pika.md)
+ [Risoluzione della sincronizzazione della coda sospesa di RabbitMQ](rabbitmq-queue-sync.md)
+ [Riduzione del numero di connessioni e canali](reducing-connections-and-channels.md)
+ [Fase 2: Connect un'applicazione basata su JVM al broker](#rabbitmq-connect-jvm-application)
+ [Connect your Amazon MQ for RabbitMQ broker to Lambda](#rabbitmq-connect-to-lambda)
+ [Utilizzo dell'autenticazione e dell'autorizzazione OAuth 2.0 per Amazon MQ for RabbitMQ](oauth-tutorial.md)
+ [Utilizzo dell'autenticazione e dell'autorizzazione IAM per Amazon MQ for RabbitMQ](rabbitmq-iam-tutorial.md)
+ [Utilizzo dell'autenticazione e dell'autorizzazione LDAP per Amazon MQ for RabbitMQ](rabbitmq-ldap-tutorial.md)
+ [Utilizzo dell'autenticazione e dell'autorizzazione HTTP per Amazon MQ for RabbitMQ](rabbitmq-http-tutorial.md)
+ [Utilizzo dell'autenticazione del certificato SSL per Amazon MQ for RabbitMQ](rabbitmq-ssl-tutorial.md)
+ [Utilizzo di MTL per AMQP e endpoint di gestione](rabbitmq-mtls-tutorial.md)
+ [Connessione dell'applicazione JMS](rabbitmq-tutorial-jms.md)

## Fase 2: Connect un'applicazione basata su JVM al broker
<a name="rabbitmq-connect-jvm-application"></a>

 Dopo aver creato un broker RabbitMQ, è possibile collegare l'applicazione ad esso. Di seguito sono riportati esempi che mostrano come è possibile utilizzare la [libreria client Java RabbitMQ](https://www.rabbitmq.com/java-client.html) per creare una connessione al broker, creare una coda e inviare un messaggio. È possibile connettersi ai broker RabbitMQ utilizzando le librerie client RabbitMQ supportate per una varietà di linguaggi. Per ulteriori informazioni sulle librerie client RabbitMQ supportate, consulta Librerie client e strumenti per sviluppatori di [RabbitMQ](https://www.rabbitmq.com/devtools.html). 

### Prerequisiti
<a name="rabbitmq-connect-application-prerequisites-getting-started"></a>

**Nota**  
I seguenti prerequisiti sono applicabili solo ai broker RabbitMQ creati senza accessibilità pubblica. Se stai creando un broker con accessibilità pubblica, è possibile ignorarli.

#### Abilitazione degli attributi VPC
<a name="rabbitmq-connect-application-enable-vpc-attributes-getting-started"></a>

Per garantire che il broker sia accessibile all'interno del VPC, è necessario abilitare gli attributi VPC `enableDnsHostnames` e `enableDnsSupport`. Per ulteriori informazioni, consultare [Supporto del DNS nel VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support) nella *Guida per l'utente di Amazon VPC*.

#### Abilitazione delle connessioni in entrata
<a name="rabbitmq-connect-application-allow-inbound-connections-getting-started"></a>

1. Accedere alla [console Amazon MQ](https://console.aws.amazon.com/amazon-mq/).

1. Dall'elenco dei broker, scegli il nome del tuo broker (ad esempio,). **MyBroker**

1. Nella **{{MyBroker}}**pagina, nella sezione **Connessioni**, annota gli indirizzi e le porte dell'URL della console web del broker e dei protocolli a livello di cavo.

1. Nella sezione **Details** (Dettagli), in **Security and network** (Sicurezza e rete), scegliere il nome del gruppo di sicurezza o ![](http://docs.aws.amazon.com/it_it/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-broker-details-link.png).

   Viene visualizzata la pagina **Security Groups (Gruppi di sicurezza)** del pannello di controllo EC2.

1. Scegli il tuo gruppo di sicurezza dall'elenco.

1. Nella parte inferiore della pagina scegli **Inbound (In entrata)**, quindi scegli **Edit (Modifica)**.

1. Nella finestra di dialogo **Edit inbound rules** (Modifica le regole in entrata), aggiungere una regola per ogni URL o endpoint che si desidera rendere accessibile pubblicamente (nell'esempio seguente viene illustrato come eseguire questa operazione per una console Web del broker).

   1. Selezionare **Add Rule (Aggiungi regola)**.

   1. Per **Type (Tipo)** seleziona **Custom TCP (TCP personalizzato)**.

   1. Per **Source** (Origine), lasciare selezionato **Custom** (Personalizzato), quindi inserire l'indirizzo IP del sistema a cui desideri poter accedere alla console Web (ad esempio, `192.0.2.1`).

   1. Scegli **Save** (Salva).

      Il broker può ora accettare connessioni in entrata.

#### Aggiunta di dipendenze Java
<a name="rabbitmq-connect-application-java-dependencies-getting-started"></a>

Se stai usando Apache Maven per automatizzare le build, aggiungi la seguente dipendenza al tuo file `pom.xml`. [Per ulteriori informazioni sui file Project Object Model in Apache Maven, vedere Introduzione al POM.](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html)

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

Se stai usando [Gradle](https://docs.gradle.org/current/userguide/userguide.html) per automatizzare le build, dichiarare la seguente dipendenza.

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

#### Importazione delle classi `Connection` e `Channel`
<a name="rabbitmq-import-connections-and-channels"></a>

 Il client Java RabbitMQ utilizza `com.rabbitmq.client` come pacchetto di primo livello, con le classi API `Connection` e `Channel` che rappresentano una connessione e canale AMQP 0-9-1, rispettivamente. Importare le classi `Connection` e `Channel` prima di utilizzarle, come mostrato nell'esempio seguente. 

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

#### Creare un `ConnectionFactory` e connetterlo al broker
<a name="rabbitmq-create-connection-factory-and-connect"></a>

Utilizzare l'esempio seguente per creare un'istanza della classe `ConnectionFactory` con i parametri dati. Utilizzare il metodo `setHost` per configurare l'endpoint del broker annotato in precedenza. Per le connessioni a livello di filo `AMQPS`, usare la porta `5671`.

```
ConnectionFactory factory = new ConnectionFactory();

factory.setUsername(username);
factory.setPassword(password);

//Replace the URL with your information
factory.setHost("{{b-c8352341-ec91-4a78-ad9c-a43f23d325bb.mq.us-west-2.amazonaws.com}}");
factory.setPort(5671);

// Allows client to establish a connection over TLS
factory.useSslProtocol();

// Create a connection
Connection conn = factory.newConnection();

// Create a channel
Channel channel = conn.createChannel();
```

#### Pubblicazione di un messaggio in uno scambio
<a name="rabbitmq-publish-message"></a>

 Puoi utilizzare `Channel.basicPublish` per pubblicare messaggi in uno scambio. L'esempio seguente utilizza la classe AMQP `Builder` per creare un oggetto di proprietà del messaggio con tipo di contenuto `plain/text`. 

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

**Nota**  
Nota che `BasicProperties` è una classe interna della classe di titolare generata automaticamente, `AMQP`.

#### Sottoscrizione a una coda e ricezione di un messaggio
<a name="rabbitmq-subscribe-receive-message"></a>

È possibile ricevere un messaggio sottoscrivendosi a una coda utilizzando l'interfaccia `Consumer`. Una volta sottoscritti, i messaggi verranno recapitati automaticamente al loro arrivo.

Il modo più semplice per implementare un `Consumer` è usare la sottoclasse `DefaultConsumer`. Un oggetto `DefaultConsumer` può essere passato come parte di una chiamata `basicConsume` per configurare la sottoscrizione come mostrato nell'esempio seguente.

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

**Nota**  
Poiché abbiamo specificato `autoAck = false`, è necessario riconoscere i messaggi recapitati al `Consumer`, più convenientemente con il metodo `handleDelivery` come mostrato nell'esempio.

#### Chiusura della connessione e disconnessione dal broker
<a name="rabbitmq-disconnect"></a>

Per disconnettersi dal broker RabbitMQ, chiudere sia il canale che la connessione come illustrato di seguito.

```
channel.close();
conn.close();
```

**Nota**  
[Per ulteriori informazioni sull'utilizzo della libreria client Java RabbitMQ, consulta la Guida all'API del client Java RabbitMQ.](https://www.rabbitmq.com/api-guide.html)

## Fase 3: (Opzionale) Connect a una AWS Lambda funzione
<a name="rabbitmq-connect-to-lambda"></a>

 AWS Lambda può connettersi e utilizzare i messaggi del tuo broker Amazon MQ. Quando si connette un broker a Lambda, si crea una [mappatura delle origini degli eventi](https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html) che legge i messaggi da una coda e richiama la funzione [in modo sincrono](https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html). La mappatura dell'origine degli eventi creata legge i messaggi dal broker in batch e li converte in un payload Lambda sotto forma di oggetto JSON. 

**Connessione del broker a una funzione Lambda**

1. Aggiungere le seguenti autorizzazioni del ruolo IAM al [ruolo di esecuzione](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) della funzione Lambda.
   + [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)
   + [registri: CreateLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html)
   + [registri: CreateLogStream](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html)
   + [registri: PutLogEvents](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html)
   + [gestore dei segreti: GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
**Nota**  
Senza le necessarie autorizzazioni IAM, la tua funzione non sarà in grado di leggere correttamente i record dalle risorse di Amazon MQ.

1.  (Opzionale) Se hai creato un broker senza accessibilità pubblica, devi effettuare una delle seguenti operazioni per consentire a Lambda di connettersi al broker: 
   +  Configurare un gateway NAT per sottorete pubblica. Per ulteriori informazioni, consultare [Accesso a Internet e ai servizi per funzioni connesse a un VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-internet) nella *AWS Lambda Guida per gli sviluppatori*. 
   + Creare una connessione tra Amazon Virtual Private Cloud (Amazon VPC) e Lambda mediante un endpoint VPC. Il tuo Amazon VPC deve inoltre connettersi agli endpoint AWS Security Token Service (AWS STS) e Secrets Manager. Per ulteriori informazioni, consulta [Configuring interface VPC endpoints for Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc-endpoints.html) nella *AWS Lambda Guida per gli sviluppatori*. 

1.  [Configurare il broker come origine dell'evento](https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-eventsourcemapping) per una funzione Lambda che utilizza la Console di gestione AWS. Puoi anche usare il comando. [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.  Scrivere un codice per la funzione Lambda per elaborare i messaggi utilizzati dal broker. Il payload Lambda recuperato dalla mappatura dell'origine dell'evento dipende dal tipo di motore del broker. Di seguito è riportato un esempio di payload Lambda per una coda Amazon MQ per RabbitMQ. 
**Nota**  
 Nell'esempio RabbitMQ, `test` è il nome della coda e `/` è il nome dell'host virtuale predefinito. Quando si ricevono messaggi, l'origine eventi elenca i messaggi in `test::/`. 

   ```
   {
     "eventSource": "aws:rmq",
     "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8",
     "rmqMessagesByQueue": {
       "test::/": [
         {
           "basicProperties": {
             "contentType": "text/plain",
             "contentEncoding": null,
             "headers": {
               "header1": {
                 "bytes": [
                   118,
                   97,
                   108,
                   117,
                   101,
                   49
                 ]
               },
               "header2": {
                 "bytes": [
                   118,
                   97,
                   108,
                   117,
                   101,
                   50
                 ]
               },
               "numberInHeader": 10
             }
             "deliveryMode": 1,
             "priority": 34,
             "correlationId": null,
             "replyTo": null,
             "expiration": "60000",
             "messageId": null,
             "timestamp": "Jan 1, 1970, 12:33:41 AM",
             "type": null,
             "userId": "AIDACKCEVSQ6C2EXAMPLE",
             "appId": null,
             "clusterId": null,
             "bodySize": 80
           },
           "redelivered": false,
           "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ=="
         }
       ]
     }
   }
   ```

*Per ulteriori informazioni sulla connessione di Amazon MQ a Lambda, sulle opzioni supportate da Lambda per un'origine di eventi Amazon MQ e sugli errori di mappatura delle sorgenti degli eventi, consulta Using [Lambda with Amazon MQ](https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html) nella Developer Guide.AWS Lambda *