

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

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

Tutorial berikut menunjukkan cara mengonfigurasi dan menggunakan RabbitMQ di Amazon MQ. Untuk mempelajari lebih lanjut tentang bekerja dengan pustaka klien yang didukung dalam berbagai bahasa pemrograman seperti Node.js, Python, .NET, dan lainnya, lihat [Tutorial RabbitMQ](https://www.rabbitmq.com/getstarted.html) dalam *Panduan Memulai RabbitMQ*.

**Topics**
+ [Mengedit preferensi broker](amazon-mq-rabbitmq-editing-broker-preferences.md)
+ [Menggunakan Python Pika dengan Amazon MQ untuk RabbitMQ](amazon-mq-rabbitmq-pika.md)
+ [Menyelesaikan sinkronisasi antrean RabbitMQ yang dijeda](rabbitmq-queue-sync.md)
+ [Mengurangi jumlah koneksi dan saluran](reducing-connections-and-channels.md)
+ [Langkah 2: Hubungkan aplikasi berbasis JVM ke broker Anda](#rabbitmq-connect-jvm-application)
+ [Connect your Amazon MQ for RabbitMQ broker to Lambda](#rabbitmq-connect-to-lambda)
+ [Menggunakan otentikasi OAuth 2.0 dan otorisasi untuk Amazon MQ untuk RabbitMQ](oauth-tutorial.md)
+ [Menggunakan otentikasi dan otorisasi IAM untuk Amazon MQ untuk RabbitMQ](rabbitmq-iam-tutorial.md)
+ [Menggunakan otentikasi dan otorisasi LDAP untuk Amazon MQ untuk RabbitMQ](rabbitmq-ldap-tutorial.md)
+ [Menggunakan otentikasi HTTP dan otorisasi untuk Amazon MQ untuk RabbitMQ](rabbitmq-http-tutorial.md)
+ [Menggunakan otentikasi sertifikat SSL untuk Amazon MQ untuk RabbitMQ](rabbitmq-ssl-tutorial.md)
+ [Menggunakan mTL untuk AMQP dan endpoint manajemen](rabbitmq-mtls-tutorial.md)
+ [Menghubungkan aplikasi JMS Anda](rabbitmq-tutorial-jms.md)

## Langkah 2: Hubungkan aplikasi berbasis JVM ke broker Anda
<a name="rabbitmq-connect-jvm-application"></a>

 Setelah membuat broker RabbitMQ, Anda dapat menghubungkan aplikasi ke broker. Contoh berikut menunjukkan cara menggunakan [Pustaka klien RabbitMQ Java](https://www.rabbitmq.com/java-client.html) untuk membuat koneksi ke broker, membuat antrean, dan mengirim pesan. Anda dapat terhubung ke broker RabbitMQ menggunakan pustaka klien RabbitMQ yang didukung untuk berbagai bahasa. Untuk informasi selengkapnya tentang pustaka klien RabbitMQ yang didukung, lihat pustaka klien [RabbitMQ](https://www.rabbitmq.com/devtools.html) dan alat pengembang. 

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

**catatan**  
Langkah-langkah prasyarat berikut ini hanya berlaku untuk broker RabbitMQ yang dibuat tanpa aksesibilitas publik. Jika Anda membuat broker dengan aksesibilitas publik, Anda dapat melewatinya.

#### Mengaktifkan atribut VPC
<a name="rabbitmq-connect-application-enable-vpc-attributes-getting-started"></a>

Untuk memastikan bahwa broker dapat diakses dalam VPC, Anda harus mengaktifkan atribut VPC `enableDnsHostnames` dan `enableDnsSupport`. Untuk informasi selengkapnya, lihat [Dukungan DNS di VPC Anda](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support) dalam *Panduan Pengguna Amazon VPC*.

#### Mengaktifkan koneksi masuk
<a name="rabbitmq-connect-application-allow-inbound-connections-getting-started"></a>

1. Masuk ke [konsol Amazon MQ](https://console.aws.amazon.com/amazon-mq/).

1. Dari daftar broker, pilih nama broker Anda (misalnya, **MyBroker**).

1. Pada ***MyBroker***halaman, di bagian **Koneksi**, catat alamat dan port URL konsol web broker dan protokol tingkat kabel.

1. Di bagian **Detail**, di bawah **Keamanan dan jaringan**, pilih nama grup keamanan Anda atau ![\[Pencil icon indicating an edit or modification action.\]](http://docs.aws.amazon.com/id_id/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-broker-details-link.png).

   Halaman **Grup Keamanan** Dasbor EC2 akan ditampilkan.

1. Dari daftar grup keamanan, pilih grup keamanan Anda.

1. Di bagian bawah halaman, pilih tab **Masuk**, lalu pilih **Edit**.

1. Di kotak dialog **Edit aturan masuk**, tambahkan aturan untuk setiap URL atau titik akhir yang Anda inginkan untuk dapat diakses secara publik (contoh berikut menampilkan cara melakukannya untuk konsol web broker).

   1. Pilih **Tambahkan aturan**.

   1. Untuk **Jenis**, pilih **TCP Kustom**.

   1. Untuk **Sumber**, biarkan **Kustom** dipilih lalu ketik alamat IP sistem yang Anda inginkan untuk dapat mengakses konsol web (misalnya, `192.0.2.1`).

   1. Pilih **Simpan**.

      Broker Anda kini dapat menerima koneksi masuk.

#### Menambahkan dependensi Java
<a name="rabbitmq-connect-application-java-dependencies-getting-started"></a>

Jika Anda menggunakan Apache Maven untuk mengotomatisasi build, tambahkan dependensi berikut ke file `pom.xml`. Untuk informasi selengkapnya tentang file Model Objek Proyek di Apache Maven, lihat [Pengantar](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html) POM.

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

Jika Anda menggunakan [Gradle](https://docs.gradle.org/current/userguide/userguide.html) untuk mengotomatisasi build, nyatakan dependensi berikut.

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

#### Mengimpor kelas `Connection` dan `Channel`
<a name="rabbitmq-import-connections-and-channels"></a>

 Klien RabbitMQ Java menggunakan `com.rabbitmq.client` sebagai paket tingkat atas, dengan kelas API `Connection` dan `Channel`, masing-masing mewakili koneksi dan saluran AMQP 0-9-1. Impor kelas `Connection` dan `Channel` sebelum menggunakannya, seperti yang ditampilkan dalam contoh berikut. 

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

#### Membuat `ConnectionFactory` dan menghubungkan ke broker Anda
<a name="rabbitmq-create-connection-factory-and-connect"></a>

Gunakan contoh berikut untuk membuat instans kelas `ConnectionFactory` dengan parameter yang diberikan. Gunakan metode `setHost` untuk mengonfigurasi titik akhir broker yang Anda perhatikan sebelumnya. Untuk koneksi tingkat wire `AMQPS`, gunakan port `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();
```

#### Memublikasikan pesan ke pertukaran
<a name="rabbitmq-publish-message"></a>

 Anda dapat menggunakan `Channel.basicPublish` untuk memublikasikan pesan ke pertukaran. Contoh berikut menggunakan kelas `Builder` AMQP untuk membangun objek properti pesan dengan jenis konten `plain/text`. 

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

**catatan**  
Perhatikan bahwa `BasicProperties` adalah kelas bagian dalam dari kelas pemilik yang dihasilkan secara otomatis, `AMQP`.

#### Berlangganan antrian dan menerima pesan
<a name="rabbitmq-subscribe-receive-message"></a>

Anda dapat menerima pesan dengan berlangganan antrian menggunakan antarmuka. `Consumer` Setelah berlangganan, pesan kemudian akan dikirim secara otomatis saat mereka tiba.

Cara termudah untuk menerapkan `Consumer` adalah dengan menggunakan subkelas `DefaultConsumer`. Objek `DefaultConsumer` dapat diteruskan sebagai bagian dari panggilan `basicConsume` untuk menyiapkan langganan seperti yang ditampilkan dalam contoh berikut.

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

**catatan**  
Karena kita menentukan `autoAck = false`, pesan yang dikirim ke `Consumer` perlu diakui, dan paling mudah dilakukan dengan metode `handleDelivery`, seperti yang ditampilkan dalam contoh.

#### Menutup koneksi Anda dan memutuskan koneksi dari broker
<a name="rabbitmq-disconnect"></a>

Untuk memutuskan koneksi dari broker RabbitMQ, tutup saluran dan koneksi seperti yang ditunjukkan di bawah ini.

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

**catatan**  
Untuk informasi selengkapnya tentang bekerja dengan pustaka klien Java RabbitMQ, lihat Panduan API Klien Java [RabbitMQ](https://www.rabbitmq.com/api-guide.html).

## Langkah 3: (Opsional) Connect ke AWS Lambda fungsi
<a name="rabbitmq-connect-to-lambda"></a>

 AWS Lambda dapat terhubung ke dan mengkonsumsi pesan dari broker Amazon MQ Anda. [Saat Anda menghubungkan broker ke Lambda, Anda membuat [pemetaan sumber peristiwa](https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html) yang membaca pesan dari antrian dan memanggil fungsi secara sinkron.](https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html) Pemetaan sumber acara yang Anda buat membaca pesan dari broker Anda dalam batch dan mengubahnya menjadi muatan Lambda dalam bentuk objek JSON. 

**Untuk menghubungkan broker Anda ke fungsi Lambda**

1. [Tambahkan izin peran IAM berikut ke peran eksekusi fungsi Lambda Anda.](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)
   + [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)
   + [log: CreateLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html)
   + [log: CreateLogStream](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html)
   + [log: PutLogEvents](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html)
   + [manajer rahasia: GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
**catatan**  
Tanpa izin IAM yang diperlukan, fungsi Anda tidak akan berhasil membaca catatan dari sumber daya Amazon MQ.

1.  (Opsional) Jika Anda telah membuat broker tanpa aksesibilitas publik, Anda harus melakukan salah satu hal berikut untuk memungkinkan Lambda terhubung ke broker Anda: 
   +  Konfigurasikan satu NAT gateway per subnet publik. *Untuk informasi selengkapnya, lihat [Akses Internet dan layanan untuk fungsi yang terhubung dengan VPC di Panduan](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-internet) Pengembang.AWS Lambda * 
   + Buat koneksi antara Amazon Virtual Private Cloud (Amazon VPC) dan Lambda menggunakan titik akhir VPC. VPC Amazon Anda juga harus terhubung ke AWS Security Token Service (AWS STS) dan titik akhir Secrets Manager. *Untuk informasi selengkapnya, lihat [Mengonfigurasi titik akhir VPC antarmuka untuk](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc-endpoints.html)AWS Lambda Lambda di Panduan Pengembang.* 

1.  [Konfigurasikan broker Anda sebagai sumber acara](https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-eventsourcemapping) untuk fungsi Lambda menggunakan. Konsol Manajemen AWS Anda juga dapat menggunakan [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 perintah. 

1.  Tulis beberapa kode untuk fungsi Lambda Anda untuk memproses pesan dari yang Anda konsumsi dari broker Anda. Payload Lambda yang diambil oleh pemetaan sumber acara Anda tergantung pada jenis mesin broker. Berikut ini adalah contoh payload Lambda untuk Amazon MQ untuk antrian RabbitMQ. 
**catatan**  
 Dalam contoh, `test` adalah nama antrian, dan `/` merupakan nama host virtual default. Saat menerima pesan, sumber acara mencantumkan pesan di bawah`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=="
         }
       ]
     }
   }
   ```

[https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html](https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html)