

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)

# Mengedit preferensi broker
<a name="amazon-mq-rabbitmq-editing-broker-preferences"></a>

Anda dapat mengedit preferensi broker Anda, seperti mengaktifkan atau menonaktifkan CloudWatch log menggunakan. Konsol Manajemen AWS

## Mengedit opsi broker RabbitMQ
<a name="rabbitmq-edit-current-configuration-console"></a>

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

1. Dari daftar broker, pilih broker Anda (misalnya, **MyBroker**) dan kemudian pilih **Edit**.

1. Pada *MyBroker* halaman **Edit**, di bagian **Spesifikasi**, pilih **versi mesin Broker** atau **jenis Instance Broker**.

   

1. Di bagian **CloudWatch Log**, klik tombol toggle untuk mengaktifkan atau menonaktifkan log umum. Tidak ada langkah lain yang diperlukan.
**catatan**  
Untuk broker RabbitMQ, Amazon MQ secara otomatis menggunakan Service-Linked Role (SLR) untuk mempublikasikan log umum ke. CloudWatch Untuk informasi selengkapnya, lihat [Menggunakan peran tertaut layanan untuk Amazon MQ](using-service-linked-roles.md) 
Amazon MQ tidak mendukung pencatatan audit untuk broker RabbitMQ.

1. Di bagian **Pemeliharaan**, konfigurasikan jadwal pemeliharaan broker Anda:

   Untuk meningkatkan broker ke versi baru saat AWS merilisnya, pilih **Aktifkan peningkatan versi minor otomatis.** Peningkatan otomatis terjadi selama *jendela pemeliharaan* yang ditentukan oleh hari dalam seminggu, waktu dalam sehari (dalam format 24 jam), dan zona waktu (UTC secara default).

1. Pilih **Perubahan jadwal**.
**catatan**  
Jika Anda hanya memilih **Aktifkan peningkatan versi minor otomatis**, tombol berubah menjadi **Simpan** karena boot ulang broker tidak diperlukan.

   Preferensi Anda diterapkan pada broker Anda pada waktu yang ditentukan.

# Menggunakan Python Pika dengan Amazon MQ untuk RabbitMQ
<a name="amazon-mq-rabbitmq-pika"></a>

 Tutorial berikut menunjukkan bagaimana Anda dapat mengatur klien [Python Pika](https://github.com/pika/pika) dengan TLS dikonfigurasi untuk terhubung ke Amazon MQ untuk broker RabbitMQ. Pika adalah implementasi Python dari protokol AMQP 0-9-1 untuk RabbitMQ. Tutorial ini memandu Anda melalui instalasi Pika, mendeklarasikan antrian, menyiapkan penerbit untuk mengirim pesan ke pertukaran default broker, dan menyiapkan konsumen untuk menerima pesan dari antrian. 

**Topics**
+ [Prasyarat](#amazon-mq-rabbitmq-pika-prerequisites)
+ [Izin](#amazon-mq-rabbitmq-pika-permissions)
+ [Langkah satu: Buat klien Python Pika dasar](#amazon-mq-rabbitmq-pika-basic-client)
+ [Langkah kedua: Buat penerbit dan kirim pesan](#amazon-mq-rabbitmq-pika-publisher-basic-publish)
+ [Langkah ketiga: Buat konsumen dan terima pesan](#amazon-mq-rabbitmq-pika-consumer-basic-get)
+ [Langkah empat: (Opsional) Siapkan loop acara dan gunakan pesan](#amazon-mq-rabbitmq-pika-consumer-basic-consume)
+ [Apa selanjutnya?](#amazon-mq-rabbitmq-pika-whats-next)

## Prasyarat
<a name="amazon-mq-rabbitmq-pika-prerequisites"></a>

 Untuk menyelesaikan langkah-langkah dalam tutorial ini, Anda memerlukan prasyarat berikut: 
+ Amazon MQ untuk broker RabbitMQ. Untuk informasi selengkapnya, lihat [Membuat Amazon MQ untuk broker RabbitMQ](getting-started-rabbitmq.md#create-rabbitmq-broker).
+ [Python 3](https://www.python.org/downloads/) diinstal untuk sistem operasi Anda.
+ [Pika](https://pika.readthedocs.io/en/stable/) diinstal menggunakan Python`pip`. Untuk menginstal Pika, buka jendela terminal baru dan jalankan yang berikut ini.

  ```
  $ python3 -m pip install pika
  ```

## Izin
<a name="amazon-mq-rabbitmq-pika-permissions"></a>

Untuk tutorial ini, Anda memerlukan setidaknya satu Amazon MQ untuk pengguna broker RabbitMQ dengan izin untuk menulis ke, dan membaca dari, vhost. Tabel berikut menjelaskan izin minimum yang diperlukan sebagai pola ekspresi reguler (regexp).


| Tag | Konfigurasikan regexp | Tulis regexp | Baca regexp | 
| --- | --- | --- | --- | 
| none |  | .\$1 | .\$1 | 

 Izin pengguna yang tercantum hanya memberikan izin baca dan tulis kepada pengguna, tanpa memberikan akses ke plugin manajemen untuk melakukan operasi administratif pada broker. Anda dapat membatasi izin lebih lanjut dengan menyediakan pola regexp yang membatasi akses pengguna ke antrian tertentu. Misalnya, jika Anda mengubah pola regexp baca menjadi`^[hello world].*`, pengguna hanya akan memiliki izin untuk membaca dari antrian yang dimulai dengan. `hello world` 

Untuk informasi selengkapnya tentang cara membuat pengguna RabbitMQ serta mengelola tanda dan izin pengguna, lihat [Amazon MQ untuk pengguna broker RabbitMQ](rabbitmq-simple-auth-broker-users.md#rabbitmq-basic-elements-user).

## Langkah satu: Buat klien Python Pika dasar
<a name="amazon-mq-rabbitmq-pika-basic-client"></a>

Untuk membuat kelas basis klien Python Pika yang mendefinisikan konstruktor dan menyediakan konteks SSL yang diperlukan untuk konfigurasi TLS saat berinteraksi dengan Amazon MQ untuk broker RabbitMQ, lakukan hal berikut.

1.  Buka jendela terminal baru, buat direktori baru untuk proyek Anda, dan arahkan ke direktori. 

   ```
   $ mkdir pika-tutorial
   $ cd pika-tutorial
   ```

1.  Buat file baru,`basicClient.py`, yang berisi kode Python berikut. 

   ```
   import ssl
   import pika
   
   class BasicPikaClient:
   
       def __init__(self, rabbitmq_broker_id, rabbitmq_user, rabbitmq_password, region):
   
           # SSL Context for TLS configuration of Amazon MQ for RabbitMQ
           ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
           ssl_context.set_ciphers('ECDHE+AESGCM:!ECDSA')
   
           url = f"amqps://{rabbitmq_user}:{rabbitmq_password}@{rabbitmq_broker_id}.mq.{region}.amazonaws.com:5671"
           parameters = pika.URLParameters(url)
           parameters.ssl_options = pika.SSLOptions(context=ssl_context)
   
           self.connection = pika.BlockingConnection(parameters)
           self.channel = self.connection.channel()
   ```

 Anda sekarang dapat menentukan kelas tambahan untuk penerbit dan konsumen yang mewarisi dari. `BasicPikaClient` 

## Langkah kedua: Buat penerbit dan kirim pesan
<a name="amazon-mq-rabbitmq-pika-publisher-basic-publish"></a>

 Untuk membuat penerbit yang mendeklarasikan antrian, dan mengirim satu pesan, lakukan hal berikut. 

1.  Salin isi contoh kode berikut, dan simpan secara lokal seperti `publisher.py` di direktori yang sama yang Anda buat pada langkah sebelumnya. 

   ```
   from basicClient import BasicPikaClient
   
   class BasicMessageSender(BasicPikaClient):
   
       def declare_queue(self, queue_name):
           print(f"Trying to declare queue({queue_name})...")
           self.channel.queue_declare(queue=queue_name)
   
       def send_message(self, exchange, routing_key, body):
           channel = self.connection.channel()
           channel.basic_publish(exchange=exchange,
                                 routing_key=routing_key,
                                 body=body)
           print(f"Sent message. Exchange: {exchange}, Routing Key: {routing_key}, Body: {body}")
   
       def close(self):
           self.channel.close()
           self.connection.close()
   
   if __name__ == "__main__":
   
       # Initialize Basic Message Sender which creates a connection
       # and channel for sending messages.
       basic_message_sender = BasicMessageSender(
           "<broker-id>",
           "<username>",
           "<password>",
           "<region>"
       )
   
       # Declare a queue
       basic_message_sender.declare_queue("hello world queue")
   
       # Send a message to the queue.
       basic_message_sender.send_message(exchange="", routing_key="hello world queue", body=b'Hello World!')
   
       # Close connections.
       basic_message_sender.close()
   ```

    `BasicMessageSender`Kelas mewarisi dari `BasicPikaClient` dan mengimplementasikan metode tambahan untuk menghapus antrian, mengirim pesan ke antrian, dan menutup koneksi. Contoh kode merutekan pesan ke pertukaran default, dengan kunci routing sama dengan nama antrian. 

1.  Di bawah`if __name__ == "__main__":`, ganti parameter yang diteruskan ke pernyataan `BasicMessageSender` konstruktor dengan informasi berikut. 
   +  **`<broker-id>`** – ID unik yang dihasilkan Amazon MQ untuk broker. Anda dapat mengurai ID dari ARN broker. Misalnya, dengan ARN berikut, `arn:aws:mq:us-east-2:123456789012:broker:MyBroker:b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9`, ID broker akan menjadi `b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9`. 
   +  **`<username>`**— Nama pengguna untuk pengguna broker dengan izin yang cukup untuk menulis pesan ke broker. 
   +  **`<password>`**— Kata sandi untuk pengguna broker dengan izin yang cukup untuk menulis pesan ke broker. 
   +  **`<region>`**— AWS Wilayah tempat Anda membuat Amazon MQ untuk broker RabbitMQ. Misalnya, `us-west-2`. 

1.  Jalankan perintah berikut di direktori yang sama yang Anda buat`publisher.py`. 

   ```
   $ python3 publisher.py
   ```

   Jika kode berjalan dengan sukses, Anda akan melihat output berikut di jendela terminal Anda.

   ```
   Trying to declare queue(hello world queue)...
   Sent message. Exchange: , Routing Key: hello world queue, Body: b'Hello World!'
   ```

## Langkah ketiga: Buat konsumen dan terima pesan
<a name="amazon-mq-rabbitmq-pika-consumer-basic-get"></a>

 Untuk membuat konsumen yang menerima satu pesan dari antrian, lakukan hal berikut. 

1.  Salin isi contoh kode berikut, dan simpan secara lokal seperti `consumer.py` di direktori yang sama. 

   ```
   from basicClient import BasicPikaClient
   
   class BasicMessageReceiver(BasicPikaClient):
   
       def get_message(self, queue):
           method_frame, header_frame, body = self.channel.basic_get(queue)
           if method_frame:
               print(method_frame, header_frame, body)
               self.channel.basic_ack(method_frame.delivery_tag)
               return method_frame, header_frame, body
           else:
               print('No message returned')
   
       def close(self):
           self.channel.close()
           self.connection.close()
   
   
   if __name__ == "__main__":
   
       # Create Basic Message Receiver which creates a connection
       # and channel for consuming messages.
       basic_message_receiver = BasicMessageReceiver(
           "<broker-id>",
           "<username>",
           "<password>",
           "<region>"
       )
   
       # Consume the message that was sent.
       basic_message_receiver.get_message("hello world queue")
   
       # Close connections.
       basic_message_receiver.close()
   ```

    Mirip dengan penerbit yang Anda buat pada langkah sebelumnya, `BasicMessageReceiver` mewarisi dari `BasicPikaClient` dan mengimplementasikan metode tambahan untuk menerima satu pesan, dan menutup koneksi.

1.  Di bawah `if __name__ == "__main__":` pernyataan itu, ganti parameter yang diteruskan ke `BasicMessageReceiver` konstruktor dengan informasi Anda. 

1.  Jalankan perintah berikut di direktori proyek Anda. 

   ```
   $ python3 consumer.py
   ```

   Jika kode berjalan dengan sukses, Anda akan melihat isi pesan, dan header termasuk tombol routing, ditampilkan di jendela terminal Anda.

   ```
   <Basic.GetOk(['delivery_tag=1', 'exchange=', 'message_count=0', 'redelivered=False', 'routing_key=hello world queue'])> <BasicProperties> b'Hello World!'
   ```

## Langkah empat: (Opsional) Siapkan loop acara dan gunakan pesan
<a name="amazon-mq-rabbitmq-pika-consumer-basic-consume"></a>

 Untuk menggunakan beberapa pesan dari antrian, gunakan [https://pika.readthedocs.io/en/stable/modules/channel.html#pika.channel.Channel.basic_consume](https://pika.readthedocs.io/en/stable/modules/channel.html#pika.channel.Channel.basic_consume)metode Pika dan fungsi callback seperti yang ditunjukkan pada berikut 

1.  Dalam`consumer.py`, tambahkan definisi metode berikut ke `BasicMessageReceiver` kelas. 

   ```
   def consume_messages(self, queue):
       def callback(ch, method, properties, body):
           print(" [x] Received %r" % body)
   
       self.channel.basic_consume(queue=queue, on_message_callback=callback, auto_ack=True)
   
       print(' [*] Waiting for messages. To exit press CTRL+C')
       self.channel.start_consuming()
   ```

1.  Di`consumer.py`, di bawah`if __name__ == "__main__":`, panggil `consume_messages` metode yang Anda tentukan di langkah sebelumnya. 

   ```
   if __name__ == "__main__":
   
       # Create Basic Message Receiver which creates a connection and channel for consuming messages.
       basic_message_receiver = BasicMessageReceiver(
           "<broker-id>",
           "<username>",
           "<password>",
           "<region>"
       )
   
       # Consume the message that was sent.
       # basic_message_receiver.get_message("hello world queue")
   
       # Consume multiple messages in an event loop.
       basic_message_receiver.consume_messages("hello world queue")
   
       # Close connections.
       basic_message_receiver.close()
   ```

1.  Jalankan `consumer.py` lagi, dan jika berhasil, pesan antrian akan ditampilkan di jendela terminal Anda. 

   ```
   [*] Waiting for messages. To exit press CTRL+C
   [x] Received b'Hello World!'
   [x] Received b'Hello World!'
   ...
   ```

## Apa selanjutnya?
<a name="amazon-mq-rabbitmq-pika-whats-next"></a>
+  Untuk informasi selengkapnya tentang pustaka klien RabbitMQ lain yang didukung, lihat Dokumentasi Klien RabbitMQ di [situs web RabbitMQ](https://www.rabbitmq.com/clients.html). 

# Menyelesaikan sinkronisasi antrean RabbitMQ yang dijeda
<a name="rabbitmq-queue-sync"></a>

Dalam [deployment klaster](rabbitmq-broker-architecture.md#rabbitmq-broker-architecture-cluster) Amazon MQ for RabbitMQ, pesan yang dipublikasikan untuk setiap antrean direplikasi di tiga simpul broker. Replikasi ini, disebut sebagai *pencerminan*, menyediakan ketersediaan tinggi (HA) untuk broker RabbitMQ. Antrean dalam deployment klaster terdiri dari replika *utama* di satu simpul dan satu atau lebih *cermin*. Setiap operasi diterapkan ke antrean cermin, termasuk pesan penambahan antrean, terlebuh dahulu diterapkan ke antrean utama lalu direplikasi di seluruh cermin.

Misalnya, pertimbangkan antrean yang dicerminkan direplikasi di tiga simpul: simpul utama (`main`) dan dua cermin (`mirror-1` dan `mirror-2`). Jika semua pesan dalam antrean cermin ini berhasil disebarkan ke semua cermin, antrean akan disinkronkan. Jika simpul (`mirror-1`) menjadi tidak tersedia selama interval waktu tertentu, antrean tetap operasional dan dapat terus menambahkan antrean pesan. Namun, untuk menyinkronkan antrean, pesan dipublikasikan ke `main`, sementara `mirror-1` tidak tersedia dan harus direplikasi ke `mirror-1`.

Untuk informasi selengkapnya tentang pencerminan, lihat [Antrean Klasik yang Dicerminkan](https://www.rabbitmq.com/ha.html) di situs RabbitMQ.

**Pemeliharaan dan sinkronisasi antrian**

Selama [jendela pemeliharaan](amazon-mq-rabbitmq-editing-broker-preferences.md#rabbitmq-edit-current-configuration-console), Amazon MQ melakukan semua pekerjaan pemeliharaan, satu simpul pada satu waktu, untuk memastikan bahwa broker tetap operasional. Akibatnya, antrian mungkin perlu disinkronkan karena setiap simpul melanjutkan operasi. Selama sinkronisasi, pesan yang perlu direplikasi ke cermin dimuat ke dalam memori dari volume Amazon Elastic Block Store (Amazon EBS) yang sesuai untuk diproses dalam batch. Memproses pesan dalam batch memungkinkan antrean menyinkronkan lebih cepat.

Jika antrean dibuat tetap pendek dan pesan berukuran kecil, antrean berhasil disinkronkan dan melanjutkan operasi seperti yang diharapkan. Namun, jika jumlah data dalam batch mendekati batas memori simpul, simpul memicu alarm memori tinggi, menjeda sinkronisasi antrean. Anda dapat mengonfirmasi penggunaan memori dengan membandingkan [metrik node `RabbitMemUsed` dan `RabbitMqMemLimit` broker di CloudWatch](amazon-mq-accessing-metrics.md). Sinkronisasi tidak dapat diselesaikan hingga pesan dikonsumsi atau dihapus, atau jumlah pesan dalam batch berkurang.

**catatan**  
Mengurangi ukuran batch sinkronisasi antrean dapat mengakibatkan jumlah transaksi replikasi yang lebih tinggi.

Untuk mengatasi sinkronisasi antrean yang dijeda, ikuti langkah-langkah dalam tutorial ini, yang menunjukkan cara menerapkan kebijakan `ha-sync-batch-size` dan memulai ulang sinkronisasi antrean.

**Topics**
+ [Prasyarat](#rabbitmq-queue-sync-prerequisites)
+ [Langkah 1: Menerapkan kebijakan `ha-sync-batch-size`](#rabbitmq-queue-sync-step-1)
+ [Langkah 2: Memulai ulang sinkronisasi antrean](#rabbitmq-queue-sync-step-2)
+ [Langkah selanjutnya](#rabbitmq-queue-sync-next-steps)
+ [Sumber daya terkait](#rabbitmq-queue-sync-related-resources)

## Prasyarat
<a name="rabbitmq-queue-sync-prerequisites"></a>

Untuk tutorial ini, Anda harus memiliki pengguna broker Amazon MQ for RabbitMQ dengan izin administrator. Anda dapat menggunakan pengguna administrator yang dibuat ketika pertama kali membuat broker, atau pengguna lain yang mungkin telah Anda buat sesudahnya. Tabel berikut menyediakan tanda pengguna administrator yang diperlukan dan izin sebagai pola ekspresi reguler (regexp).


| Tanda | Baca regexp | Konfigurasikan regexp | Tulis regexp | 
| --- | --- | --- | --- | 
| administrator | .\$1 | .\$1 | .\$1 | 

Untuk informasi selengkapnya tentang cara membuat pengguna RabbitMQ serta mengelola tanda dan izin pengguna, lihat [Amazon MQ untuk pengguna broker RabbitMQ](rabbitmq-simple-auth-broker-users.md#rabbitmq-basic-elements-user).

## Langkah 1: Menerapkan kebijakan `ha-sync-batch-size`
<a name="rabbitmq-queue-sync-step-1"></a>

Prosedur berikut mendemonstrasikan penambahan kebijakan yang berlaku untuk semua antrean yang dibuat pada broker. Anda dapat menggunakan konsol web RabbitMQ atau API manajemen RabbitMQ. Untuk informasi selengkapnya, lihat [Plugin Manajemen](https://www.rabbitmq.com/management.html) di situs web RabbitMQ.

**Untuk menerapkan kebijakan `ha-sync-batch-size` menggunakan konsol web RabbitMQ**

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

1. Di panel navigasi kiri, pilih **Broker**.

1. Dari daftar broker, pilih nama broker yang ingin Anda terapkan kebijakan baru.

1. Di halaman broker, pada bagian **Koneksi**, pilih URL **konsol web RabbitMQ**. Konsol web RabbitMQ terbuka di tab browser atau jendela baru.

1. Masuk ke konsol web RabbitMQ dengan kredenal masuk administrator broker Anda.

1. Di konsol web RabbitMQ, di bagian atas halaman, pilih **Admin**.

1. Di halaman **Admin**, di panel navigasi kanan, pilih **Kebijakan**.

1. Di halaman **Kebijakan**, Anda dapat melihat daftar **Kebijakan pengguna** broker saat ini. Di bawah **Kebijakan pengguna**, perluas **Tambahkan / perbarui kebijakan**.
**catatan**  
Secara default, klaster Amazon MQ for RabbitMQ dibuat dengan kebijakan broker awal bernama `ha-all-AWS-OWNED-DO-NOT-DELETE`. Amazon MQ mengelola kebijakan ini untuk memastikan bahwa setiap antrean pada broker direplikasi ke ketiga simpul dan antrean tersebut disinkronkan secara otomatis.

1. Untuk membuat kebijakan broker baru, di bawah **Tambahkan / perbarui kebijakan**, lakukan hal berikut:

   1. Untuk **Nama**, masukkan nama untuk kebijakan Anda, misalnya **batch-size-policy**.

   1. Untuk **Pola**, masukkan pola regexp **.\$1** sehingga kebijakan cocok dengan semua antrean pada broker.

   1. Untuk **Terapkan ke**, pilih **Pertukaran dan antrean** dari daftar dropdown.

   1. Untuk **Prioritas**, masukkan integer yang lebih besar dari semua kebijakan lain yang diterapkan ke vhost. Anda dapat menerapkan satu set definisi kebijakan ke antrean dan pertukaran RabbitMQ pada waktu tertentu. RabbitMQ memilih kebijakan yang cocok dengan nilai prioritas tertinggi. Untuk informasi selengkapnya tentang prioritas kebijakan dan cara menggabungkan kebijakan, lihat [Kebijakan](https://www.rabbitmq.com/parameters.html#policies) dalam Dokumentasi Server RabbitMQ.

   1. Untuk **Definisi**, tambahkan pasangan nilai kunci berikut:
      + **ha-sync-batch-size**=*100*. Pilih **Nomor** dari daftar dropdown.
**catatan**  
Anda mungkin perlu menyesuaikan dan mengalibrasi nilai `ha-sync-batch-size` berdasarkan jumlah dan ukuran pesan yang tidak disinkronkan dalam antrean.
      + **ha-mode**=**all**. Pilih **String** dari daftar dropdown.
**penting**  
Definisi `ha-mode` diperlukan untuk semua kebijakan terkait HA. Menghilangkan hasilnya mengakibatkan kegagalan validasi.
      + **ha-sync-mode**=**automatic**. Pilih **String** dari daftar dropdown.
**catatan**  
Definisi `ha-sync-mode` diperlukan untuk semua kebijakan kustom. Jika dihilangkan, Amazon MQ secara otomatis menambahkan definisi.

   1. Pilih **Buat / perbarui kebijakan**.

1. Konfirmasi bahwa kebijakan baru muncul dalam daftar **Kebijakan pengguna**.

**Untuk menerapkan kebijakan `ha-sync-batch-size` menggunakan API manajemen RabbitMQ**

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

1. Di panel navigasi kiri, pilih **Broker**.

1. Dari daftar broker, pilih nama broker yang ingin Anda terapkan kebijakan baru.

1. Di halaman broker, pada bagian **Koneksi**, catat URL **konsol web RabbitMQ**. Ini adalah titik akhir broker yang Anda gunakan dalam permintaan HTTP.

1. Buka terminal atau jendela baris perintah baru pilihan Anda.

1. Untuk membuat kebijakan broker baru, masukkan perintah `curl` baru. Perintah ini mengasumsikan antrean pada vhost `/` default, yang dienkode sebagai `%2F`.
**catatan**  
Ganti *username* dan *password* dengan kredensi masuk administrator broker Anda. Anda mungkin perlu menyesuaikan dan mengkalibrasi nilai `ha-sync-batch-size` (*100*) berdasarkan jumlah dan ukuran pesan yang tidak disinkronkan dalam antrian Anda. Mengganti titik akhir broker dengan URL yang Anda catat sebelumnya.

   ```
   curl -i -u username:password -H "content-type:application/json" -XPUT \
   -d '{"pattern":".*", "priority":1, "definition":{"ha-sync-batch-size":100, "ha-mode":"all", "ha-sync-mode":"automatic"}}' \
   https://b-589c045f-f8ln-4ab0-a89c-co62e1c32ef8.mq.us-west-2.amazonaws.com/api/policies/%2F/batch-size-policy
   ```

1. Untuk mengonfirmasi bahwa kebijakan baru ditambahkan ke kebijakan pengguna broker, masukkan perintah `curl` berikut untuk daftar seluruh kebijakan broker.

   ```
   curl -i -u username:password https://b-589c045f-f8ln-4ab0-a89c-co62e1c32ef8.mq.us-west-2.amazonaws.com/api/policies
   ```

## Langkah 2: Memulai ulang sinkronisasi antrean
<a name="rabbitmq-queue-sync-step-2"></a>

Setelah menerapkan kebijakan `ha-sync-batch-size` baru untuk broker Anda, mulai ulang sinkronisasi antrean.

**Untuk memulai ulang sinkronisasi antrean menggunakan konsol web RabbitMQ**
**catatan**  
Untuk membuka konsol web RabbitMQ, lihat petunjuk sebelumnya di Langkah 1 dalam tutorial ini.

1. Di konsol web RabbitMQ, di bagian atas halaman, pilih **Antrean**.

1. Di halaman **Antrean**, di bawah **Semua antrean**, temukan antrean yang dijeda. Di baris **Kebijakan**, antrian Anda harus mencantumkan nama kebijakan baru yang Anda buat (misalnya,`batch-size-policy`).

1. Untuk memulai ulang proses sinkronisasi dengan ukuran batch yang dikurangi, pertama-tama batalkan sinkronisasi antrian. Kemudian restart sinkronisasi antrian. 

**catatan**  
Jika sinkronisasi dijeda dan tidak berhasil diselesaikan, coba kurangi nilai `ha-sync-batch-size` dan mulai ulang sinkronisasi antrean lagi.

## Langkah selanjutnya
<a name="rabbitmq-queue-sync-next-steps"></a>
+ Setelah antrian Anda berhasil disinkronkan, Anda dapat memantau jumlah memori yang digunakan node RabbitMQ Anda dengan melihat metrik Amazon. CloudWatch `RabbitMQMemUsed` Anda juga dapat melihat metrik `RabbitMQMemLimit` untuk memantau batas memori simpul. Untuk informasi lebih lanjut, lihat [Mengakses CloudWatch metrik untuk Amazon MQ](amazon-mq-accessing-metrics.md) dan [CloudWatch Metrik yang tersedia untuk Amazon MQ untuk broker RabbitMQ](rabbitmq-logging-monitoring.md).
+ Agar sinkronisasi antrean tidak dijeda, sebaiknya buat antrean tetap pendek dan memproses pesan. Untuk beban kerja dengan ukuran pesan yang lebih besar, kami juga merekomendasikan untuk meningkatkan tipe instans broker ke ukuran instans yang lebih besar dengan lebih banyak memori. Untuk informasi lebih lanjut tentang jenis instans broker dan mengedit preferensi broker, lihat[Mengedit preferensi broker](amazon-mq-rabbitmq-editing-broker-preferences.md).
+  Ketika Anda membuat broker Amazon MQ for RabbitMQ, Amazon MQ menerapkan serangkaian kebijakan default dan batasan host virtual untuk mengoptimalkan performa broker. Jika broker Anda tidak memiliki kebijakan dan batasan default yang disarankan, sebaiknya buat sendiri. Untuk informasi selengkapnya tentang cara membuat kebijakan default dan batasan vhost, lihat [https://docs.aws.amazon.com//amazon-mq/latest/developer-guide/rabbitmq-defaults.html](https://docs.aws.amazon.com//amazon-mq/latest/developer-guide/rabbitmq-defaults.html). 

## Sumber daya terkait
<a name="rabbitmq-queue-sync-related-resources"></a>
+  [UpdateBrokerInput](https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers-broker-id.html#brokers-broker-id-model-updatebrokerinput)— Gunakan properti broker ini untuk memperbarui jenis instans broker menggunakan Amazon MQ API.
+ [Parameter dan Kebijakan](https://www.rabbitmq.com/parameters.html) (Dokumentasi Server RabbitMQ) – Pelajari lebih lanjut tentang parameter dan kebijakan RabbitMQ di situs web RabbitMQ.
+ [HTTP API Manajemen RabbitMQ](https://pulse.mozilla.org/api/) – Pelajari lebih lanjut tentang API manajemen RabbitMQ.

# Mengurangi jumlah koneksi dan saluran
<a name="reducing-connections-and-channels"></a>

Koneksi ke RabbitMQ Anda di broker Amazon MQ dapat ditutup baik oleh aplikasi klien Anda, atau dengan menutupnya secara manual menggunakan konsol web RabbitMQ. Untuk menutup koneksi menggunakan konsol web RabbitMQ, lakukan hal berikut:

1. Masuk Konsol Manajemen AWS dan buka konsol web RabbitMQ broker Anda.

1.  **Pada konsol RabbitMQ, pilih tab Connections.** 

1. Pada halaman **Koneksi**, di bawah **Semua koneksi**, pilih nama koneksi yang ingin Anda tutup dari daftar.

1.  Pada halaman detail koneksi, pilih **Tutup koneksi ini** untuk memperluas bagian, lalu pilih **Paksa Tutup**. Secara opsional, Anda dapat mengganti teks default untuk **Alasan** dengan deskripsi Anda sendiri. RabbitMQ di Amazon MQ akan mengembalikan alasan yang Anda tentukan ke klien saat Anda menutup koneksi. 

1.  Pilih **OK** pada kotak dialog untuk mengonfirmasi dan menutup koneksi. 

 Saat Anda menutup koneksi, saluran apa pun yang terkait dengan koneksi tertutup juga akan ditutup. 

**catatan**  
 Aplikasi klien Anda dapat dikonfigurasi untuk secara otomatis membangun kembali koneksi ke broker setelah ditutup. Dalam hal ini, menutup koneksi dari konsol web broker tidak akan cukup untuk mengurangi jumlah koneksi atau saluran. 

Untuk broker tanpa akses publik, Anda dapat memblokir koneksi sementara dengan menolak lalu lintas masuk pada port protokol pesan yang sesuai, misalnya, port `5671` untuk koneksi AMQP. Anda dapat memblokir port di grup keamanan yang Anda berikan ke Amazon MQ saat membuat broker. Untuk informasi selengkapnya tentang memodifikasi grup keamanan, lihat [Menambahkan aturan ke grup keamanan](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#adding-security-group-rules) di Panduan Pengguna *Amazon VPC*. 

## 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)

# Menggunakan otentikasi OAuth 2.0 dan otorisasi untuk Amazon MQ untuk RabbitMQ
<a name="oauth-tutorial"></a>

Tutorial ini menjelaskan cara mengonfigurasi [otentikasi OAuth 2.0](oauth-for-amq-for-rabbitmq.md) untuk Amazon MQ Anda untuk broker RabbitMQ menggunakan Amazon Cognito sebagai penyedia 2.0. OAuth 

**catatan**  
Amazon Cognito tidak tersedia di Tiongkok (Beijing) dan Tiongkok (Ningxia).

**penting**  
Tutorial ini khusus untuk Amazon Cognito, tetapi Anda dapat menggunakan penyedia identitas lain ()IdPs. Untuk informasi selengkapnya, lihat [Contoh Otentikasi OAuth 2.0](https://www.rabbitmq.com/docs/oauth2-examples).

**Topics**
+ [Prasyarat untuk mengonfigurasi otentikasi 2.0 OAuth](#oauth-tutorial-prerequisites)
+ [Mengonfigurasi otentikasi OAuth 2.0 dengan Amazon Cognito menggunakan AWS CLI](#oauth-tutorial-config-cognito-using-cli)
+ [Mengkonfigurasi OAuth 2.0 dan otentikasi sederhana dengan Amazon Cognito](#oauth-tutorial-config-both-auth-methods-using-cli)

## Prasyarat untuk mengonfigurasi otentikasi 2.0 OAuth
<a name="oauth-tutorial-prerequisites"></a>

Anda dapat mengatur sumber daya Amazon Cognito yang diperlukan dalam tutorial ini dengan menerapkan tumpukan, AWS CDK tumpukan [Amazon Cognito untuk plugin RabbitMQ](https://github.com/aws-samples/amazon-mq-samples/tree/main/rabbitmq-samples/rabbitmq-oauth2-cognito-sample) 2. OAuth Jika Anda menyiapkan Amazon Cognito secara manual, pastikan Anda memenuhi prasyarat berikut sebelum mengonfigurasi 2.0 OAuth di Amazon MQ Anda untuk broker RabbitMQ:

**Prasyarat untuk mengatur Amazon Cognito**
+ Siapkan titik akhir Amazon Cognito dengan membuat kumpulan pengguna. Untuk melakukan ini, lihat blog berjudul [Cara menggunakan OAuth 2.0 di Amazon Cognito: Pelajari tentang hibah 2.0 yang OAuth berbeda](https://aws.amazon.com/blogs/security/how-to-use-oauth-2-0-in-amazon-cognito-learn-about-the-different-oauth-2-0-grants/).
+ Buat server sumber daya yang dipanggil `rabbitmq` di kumpulan pengguna dengan cakupan berikut yang ditentukan:`read:all`,, `write:all``configure:all`, dan`tag:administrator`. Cakupan ini akan dikaitkan dengan izin RabbitMQ.

  Untuk informasi tentang membuat server sumber daya, lihat [Mendefinisikan server sumber daya untuk kumpulan pengguna (Konsol Manajemen AWS)](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html#cognito-user-pools-define-resource-servers-console) di Panduan Pengembang *Amazon Cognito*.
+ Buat klien aplikasi berikut:
  + Klien aplikasi untuk jenis kumpulan pengguna`Machine-to-Machine application`. Ini adalah klien rahasia dengan rahasia klien yang akan digunakan untuk klien RabbitMQ AMQP. Untuk informasi selengkapnya tentang klien aplikasi dan membuatnya, lihat [Jenis klien aplikasi](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html#user-pool-settings-client-app-client-types) dan [Membuat klien aplikasi](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html#cognito-user-pools-app-idp-settings-console-create).
  + Klien aplikasi untuk jenis kumpulan pengguna`Single-page application`. Ini adalah klien publik yang akan digunakan untuk masuk pengguna ke konsol manajemen RabbitMQ. Anda harus memperbarui klien aplikasi ini untuk menyertakan titik akhir Amazon MQ untuk broker RabbitMQ yang akan Anda buat dalam prosedur berikut sebagai URL panggilan balik yang diizinkan. Untuk informasi selengkapnya, lihat [Menyiapkan login terkelola dengan konsol Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#set-up-managed-login).

**Prasyarat untuk mengatur Amazon MQ**
+ Instalasi [Docker](https://docs.docker.com/engine/install/) yang berfungsi untuk menjalankan skrip bash yang memverifikasi apakah pengaturan OAuth 2.0 berhasil atau tidak.
+ AWS CLI versi >= `2.28.23` untuk membuat penambahan nama pengguna dan kata sandi opsional selama pembuatan broker.

## Mengonfigurasi otentikasi OAuth 2.0 dengan Amazon Cognito menggunakan AWS CLI
<a name="oauth-tutorial-config-cognito-using-cli"></a>

Prosedur berikut menunjukkan cara mengatur otentikasi OAuth 2.0 untuk Amazon MQ Anda untuk broker RabbitMQ menggunakan Amazon Cognito sebagai IDP. Prosedur ini digunakan AWS CLI untuk membuat dan mengkonfigurasi sumber daya yang diperlukan.

Dalam prosedur berikut, pastikan untuk mengganti nilai placeholder, seperti ConfigurationId dan Revision, *<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>* dan*<2>*, dengan nilai sebenarnya.

1. Buat konfigurasi baru menggunakan AWS CLI perintah [create-configuration](https://docs.aws.amazon.com/cli/latest/reference/mq/create-configuration.html) seperti yang ditunjukkan pada contoh berikut.

   ```
   aws mq create-configuration \
     --name "rabbitmq-oauth2-config" \
     --engine-type "RABBITMQ" \
     --engine-version "3.13"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "AuthenticationStrategy": "simple",
       "Created": "2025-07-17T16:03:01.759943+00:00",
       "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "LatestRevision": {
       "Created": "2025-07-17T16:03:01.759000+00:00",
       "Description": "Auto-generated default for rabbitmq-oauth2-config on RabbitMQ 3.13",
       "Revision": 1
       },
       "Name": "rabbitmq-oauth2-config"
   }
   ```

1. Buat file konfigurasi yang dipanggil **rabbitmq.conf** untuk menggunakan OAuth 2.0 sebagai metode otentikasi dan otorisasi, seperti yang ditunjukkan pada contoh berikut.

   ```
   auth_backends.1 = oauth2
   
   # FIXME: Update this value with the token signing key URL of your Amazon Cognito user pool.
   # If you used the AWS CDK stack to deploy Amazon Cognito, this is one of the stack outputs.
   auth_oauth2.jwks_url = ${RabbitMqOAuth2TestStack.JwksUri}
   auth_oauth2.resource_server_id = rabbitmq
   # Amazon Cognito does not include an audience field in access tokens
   auth_oauth2.verify_aud = false 
   
   # Amazon Cognito does not allow * in its custom scopes. Use aliases to translate between Amazon Cognito and RabbitMQ.
   auth_oauth2.scope_prefix = rabbitmq/
   auth_oauth2.scope_aliases.1.alias = rabbitmq/read:all
   auth_oauth2.scope_aliases.1.scope = rabbitmq/read:*/*
   auth_oauth2.scope_aliases.2.alias = rabbitmq/write:all
   auth_oauth2.scope_aliases.2.scope = rabbitmq/write:*/*
   auth_oauth2.scope_aliases.3.alias = rabbitmq/configure:all
   auth_oauth2.scope_aliases.3.scope = rabbitmq/configure:*/*
   
   # Allow OAuth 2.0 login for RabbitMQ management console
   management.oauth_enabled = true
   # FIXME: Update this value with the client ID of your public application client
   management.oauth_client_id = ${RabbitMqOAuth2TestStack.ManagementConsoleAppClientId}
   # FIXME: Update this value with the base JWKS URI (without /.well-known/jwks.json)
   auth_oauth2.issuer = ${RabbitMqOAuth2TestStack.Issuer}
   management.oauth_scopes = rabbitmq/tag:administrator
   ```

   Konfigurasi ini menggunakan [alias cakupan](https://www.rabbitmq.com/docs/oauth2#scope-translation) untuk memetakan cakupan yang ditentukan di Amazon Cognito ke cakupan yang kompatibel dengan RabbitMQ.

1. Perbarui konfigurasi menggunakan AWS CLI perintah [update-configuration](https://docs.aws.amazon.com/cli/latest/reference/mq/update-configuration.html) seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, tambahkan ID konfigurasi yang Anda terima sebagai respons Langkah 1 dari prosedur ini. Misalnya, **c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca**.

   ```
   aws mq update-configuration \
     --configuration-id "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>" \
     --data "$(cat rabbitmq.conf | base64 --wrap=0)"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-b600ac8e-8183-4f74-a713-983e59f30e3d",
       "Created": "2025-07-17T16:57:04.520931+00:00",
       "Id": "c-b600ac8e-8183-4f74-a713-983e59f30e3d",
       "LatestRevision": {
           "Created": "2025-07-17T16:57:39.172000+00:00",
           "Revision": 2
       },
       "Name": "rabbitmq-oauth2-config",
       "Warnings": []
   }
   ```

1. Buat broker dengan konfigurasi OAuth 2.0 yang Anda buat di Langkah 2 prosedur ini. Untuk melakukan ini, gunakan AWS CLI perintah [create-broker](https://docs.aws.amazon.com/cli/latest/reference/mq/create-broker.html) seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, berikan ID konfigurasi dan nomor revisi yang Anda peroleh dalam tanggapan Langkah 1 dan 2 masing-masing. Misalnya, **c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca** dan **2**.

   ```
   aws mq create-broker \
    --broker-name "rabbitmq-oauth2-broker" \ 
    --engine-type "RABBITMQ" \
    --engine-version "3.13" \
    --host-instance-type "mq.m7g.large" \
    --deployment-mode "CLUSTER_MULTI_AZ" \
    --logs '{"General": true}' \
    --publicly-accessible \
    --configuration '{"Id": "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>","Revision": <2>}' \
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "BrokerArn": "arn:aws:mq:us-west-2:123456789012:broker:rabbitmq-oauth2-broker:b-2a1b5133-a10c-49d2-879b-8c176c34cf73",
       "BrokerId": "b-2a1b5133-a10c-49d2-879b-8c176c34cf73"
   }
   ```

1. Verifikasi bahwa status broker bertransisi dari `CREATION_IN_PROGRESS` ke`RUNNING`, menggunakan [AWS CLI perintah deskripsi-broker](https://docs.aws.amazon.com/cli/latest/reference/mq/describe-broker.html) seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, berikan ID broker yang Anda peroleh dalam hasil langkah sebelumnya Misalnya,**b-2a1b5133-a10c-49d2-879b-8c176c34cf73**.

   ```
   aws mq describe-broker \
    --broker-id "<b-2a1b5133-a10c-49d2-879b-8c176c34cf73>"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut. Respons berikut adalah versi singkat dari output lengkap yang dikembalikan `describe-broker` perintah. Tanggapan ini menunjukkan status broker dan strategi otentikasi yang digunakan untuk mengamankan broker. Dalam hal ini, strategi `config_managed` otentikasi menunjukkan bahwa broker menggunakan OAuth 2 metode otentikasi.

   ```
   {
       "AuthenticationStrategy": "config_managed",
       ...,
       "BrokerState": "RUNNING",
       ...
   }
   ```

    Untuk masuk ke konsol manajemen RabbitMQ menggunakan OAuth2, titik akhir broker perlu ditambahkan sebagai URL panggilan balik yang valid di klien aplikasi Amazon Cognito yang sesuai. Untuk informasi selengkapnya, lihat Langkah 5 dalam pengaturan sampel tumpukan [CDK Amazon Cognito](https://github.com/aws-samples/amazon-mq-samples/tree/main/rabbitmq-samples/rabbitmq-oauth2-cognito-sample#step-5-update-callback-urls-if-using-placeholder-urls) kami. 

1. Verifikasi otentikasi dan otorisasi OAuth 2.0 dengan skrip berikut`perf-test.sh`.

   Gunakan skrip bash ini untuk menguji konektivitas ke Amazon MQ Anda untuk broker RabbitMQ. Skrip ini memperoleh token dari Amazon Cognito dan memverifikasi apakah koneksi telah dikonfigurasi dengan benar. Jika berhasil dikonfigurasi, Anda akan melihat broker Anda mempublikasikan dan menggunakan pesan.

   Jika Anda menerima `ACCESS_REFUSED` kesalahan, Anda dapat memecahkan masalah pengaturan konfigurasi Anda dengan menggunakan CloudWatch log untuk broker Anda. Anda dapat menemukan tautan untuk grup CloudWatch log untuk broker Anda di konsol Amazon MQ.

   Dalam skrip ini, Anda harus memberikan nilai-nilai berikut:
   + `CLIENT_ID`dan`CLIENT_SECRET`: Anda dapat menemukan nilai-nilai ini di halaman **Klien aplikasi** di konsol Amazon Cognito.
   + Domain Cognito: Anda dapat menemukannya di konsol Amazon Cognito. Di bawah **Branding**, pilih **Domain**. Pada halaman **Domain**, Anda dapat menemukan nilai ini di bawah bagian **Server sumber daya**.
   + Titik akhir broker Amazon MQ: Anda dapat menemukan nilai ini di bawah **Koneksi** di halaman detail broker konsol Amazon MQ.

   ```
   #! /bin/bash
   set -e
   
   # Client information
   ## FIXME: Update this value with the client ID and secret of your confidential application client
   CLIENT_ID=${RabbitMqOAuth2TestStack.AmqpAppClientId}
   CLIENT_SECRET=${RabbitMqOAuth2TestStack.AmqpAppClientSecret}
   
   # FIXME: Update this value with the domain of your Amazon Cognito user pool
   RESPONSE=$(curl -X POST ${RabbitMqOAuth2TestStack.TokenEndpoint} \
                   -H "Content-Type: application/x-www-form-urlencoded" \
                   -d "grant_type=client_credentials&client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}&scope=rabbitmq/configure:all rabbitmq/read:all rabbitmq/tag:administrator rabbitmq/write:all")
   
   
   # Extract the access_token from the response.
   # This token will be passed in the password field when connecting to the broker.
   # Note that the username is left blank, the field is ignored by the plugin.
   BROKER_PASSWORD=$(echo ${RESPONSE} | jq -r '.access_token')
   
   # FIXME: Update this value with the endpoint of your broker. For example, b-89424106-7e0e-4abe-8e98-8de0dada7630.mq.us-east-1.on.aws.
   BROKER_DNS=<broker_dns>
   CONNECTION_STRING=amqps://:${BROKER_PASSWORD}@${BROKER_DNS}:5671 
   
   # Produce/consume messages using the above connection string
   QUEUES_COUNT=1
   PRODUCERS_COUNT=1
   CONSUMERS_COUNT=1
   PRODUCER_RATE=1
   
   docker run -it --rm --ulimit nofile=40960:40960 pivotalrabbitmq/perf-test:latest \
       --queue-pattern 'test-queue-%d' --queue-pattern-from 1 --queue-pattern-to $QUEUES_COUNT \
       --producers $PRODUCERS_COUNT --consumers $CONSUMERS_COUNT \
       --id "test${QUEUES_COUNT}q${PRODUCERS_COUNT}p${CONSUMERS_COUNT}c${PRODUCER_RATE}r" \
       --uri ${CONNECTION_STRING} \
       --flag persistent --rate $PRODUCER_RATE
   ```

## Mengkonfigurasi OAuth 2.0 dan otentikasi sederhana dengan Amazon Cognito
<a name="oauth-tutorial-config-both-auth-methods-using-cli"></a>

Saat Anda membuat broker dengan otentikasi OAuth 2.0, Anda dapat menentukan salah satu metode otentikasi berikut:
+ **OAuth 2.0 saja**: Untuk menggunakan metode ini, jangan berikan nama pengguna dan kata sandi saat membuat broker. [Prosedur sebelumnya](#oauth-tutorial-config-cognito-using-cli) menunjukkan cara menggunakan hanya metode otentikasi OAuth 2.0.
+ **Baik OAuth 2.0 dan otentikasi sederhana**: Untuk menggunakan metode ini, berikan nama pengguna dan kata sandi saat membuat broker. Juga, tambahkan `auth_backends.2 = internal` ke konfigurasi broker Anda, seperti yang ditunjukkan dalam prosedur berikut.

Dalam prosedur berikut, pastikan untuk mengganti nilai placeholder, seperti *<ConfigurationId>* dan*<Revision>*, dengan nilai aktualnya.

1. Untuk menggunakan kedua metode otentikasi, buat konfigurasi broker Anda, seperti yang ditunjukkan pada contoh berikut.

   ```
   auth_backends.1 = oauth2
   auth_backends.2 = internal
   
   # FIXME: Update this value with the token signing key URL of your Amazon Cognito user pool
   auth_oauth2.jwks_url = ${RabbitMqOAuth2TestStack.JwksUri}
   auth_oauth2.resource_server_id = rabbitmq
   auth_oauth2.verify_aud = false
   
   auth_oauth2.scope_prefix = rabbitmq/
   auth_oauth2.scope_aliases.1.alias = rabbitmq/read:all
   auth_oauth2.scope_aliases.1.scope = rabbitmq/read:*/*
   auth_oauth2.scope_aliases.2.alias = rabbitmq/write:all
   auth_oauth2.scope_aliases.2.scope = rabbitmq/write:*/*
   auth_oauth2.scope_aliases.3.alias = rabbitmq/configure:all
   auth_oauth2.scope_aliases.3.scope = rabbitmq/configure:*/*
   ```

   Konfigurasi ini menggunakan [alias cakupan](https://www.rabbitmq.com/docs/oauth2#scope-translation) untuk memetakan cakupan yang ditentukan di Amazon Cognito ke cakupan yang kompatibel dengan RabbitMQ.

1. Buat broker yang menggunakan kedua metode otentikasi, seperti yang ditunjukkan pada contoh berikut.

   ```
   aws mq create-broker \
    --broker-name "rabbitmq-oauth2-broker-with-internal-user" \
    --engine-type "RABBITMQ" \
    --engine-version "3.13" \
    --host-instance-type "mq.m7g.large" \
    --deployment-mode "CLUSTER_MULTI_AZ" \
    --logs '{"General": true}' \
    --publicly-accessible \
    --configuration '{"Id": "<ConfigurationId>","Revision": <Revision>}' \
    --users '[{"Username":"<myUser>","Password":"<myPassword11>"}]'
   ```

1. Verifikasi status broker dan konfigurasi untuk menyiapkan metode otentikasi berhasil seperti yang dijelaskan dalam Langkah 5 dan 6 dari [Mengonfigurasi otentikasi OAuth 2.0 dengan Amazon Cognito](#oauth-tutorial-config-cognito-using-cli) prosedur.

# Menggunakan otentikasi dan otorisasi IAM untuk Amazon MQ untuk RabbitMQ
<a name="rabbitmq-iam-tutorial"></a>

Prosedur berikut menunjukkan cara mengaktifkan otentikasi dan otorisasi AWS IAM untuk Amazon MQ untuk broker RabbitMQ. Setelah mengaktifkan IAM, pengguna dapat mengautentikasi menggunakan kredensional AWS IAM untuk mengakses API Manajemen RabbitMQ dan terhubung melalui AMQP. Untuk detail tentang cara kerja otentikasi IAM dengan Amazon MQ untuk RabbitMQ, lihat. [Otentikasi dan otorisasi IAM untuk Amazon MQ untuk RabbitMQ](iam-for-amq-for-rabbitmq.md)

## Prasyarat
<a name="iam-tutorial-prerequisites"></a>
+ AWS kredensi administrator untuk AWS akun yang memiliki Amazon MQ untuk broker RabbitMQ
+ Lingkungan shell yang dikonfigurasi dengan kredensi administrator ini (menggunakan profil AWS CLI atau variabel lingkungan)
+ AWS CLI diinstal dan dikonfigurasi
+ `jq`prosesor JSON baris perintah diinstal
+ `curl`alat baris perintah diinstal

## Mengkonfigurasi otentikasi dan otorisasi IAM menggunakan AWS CLI
<a name="iam-tutorial-procedure"></a>

1. **Tetapkan variabel lingkungan**

   Tetapkan variabel lingkungan yang diperlukan untuk broker Anda:

   ```
   export AWS_DEFAULT_REGION=<region>
   export BROKER_ID=<broker-id>
   ```

1. **Aktifkan token JWT keluar**

   Aktifkan federasi identitas web keluar untuk AWS akun Anda:

   ```
   ISSUER_IDENTIFIER=$(aws iam enable-outbound-web-identity-federation --query 'IssuerIdentifier' --output text)
   echo $ISSUER_IDENTIFIER
   ```

   Output menampilkan URL pengenal penerbit unik untuk akun Anda dalam format. `https://<id>.tokens.sts.global.api.aws`

1. **Buat dokumen kebijakan IAM**

   Buat dokumen kebijakan yang memberikan izin untuk mendapatkan token identitas web:

   ```
   cat > policy.json << 'EOF'
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "sts:GetWebIdentityToken",
                   "sts:TagGetWebIdentityToken"
               ],
               "Resource": "*"
           }
       ]
   }
   EOF
   ```

1. **Buat kebijakan kepercayaan**

   Ambil identitas penelepon Anda dan buat dokumen kebijakan kepercayaan:

   ```
   CALLER_ARN=$(aws sts get-caller-identity --query Arn --output text)
   cat > trust-policy.json << EOF
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "$CALLER_ARN"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   EOF
   ```

1. **Buat peran IAM**

   Buat peran IAM dan lampirkan kebijakan:

   ```
   aws iam create-role --role-name RabbitMqAdminRole --assume-role-policy-document file://trust-policy.json
   aws iam put-role-policy --role-name RabbitMqAdminRole --policy-name RabbitMqAdminRolePolicy --policy-document file://policy.json
   ```

1. **Konfigurasikan pengaturan OAuth2 RabbitMQ**

   Buat file konfigurasi RabbitMQ dengan pengaturan OAuth2 otentikasi dan otorisasi:

   ```
   cat > rabbitmq.conf << EOF
   auth_backends.1 = oauth2
   auth_backends.2 = internal
   
   auth_oauth2.jwks_url = ${ISSUER_IDENTIFIER}/.well-known/jwks.json
   auth_oauth2.resource_server_id = rabbitmq
   auth_oauth2.scope_prefix = rabbitmq/
   
   auth_oauth2.additional_scopes_key = sub
   auth_oauth2.scope_aliases.1.alias = arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/RabbitMqAdminRole
   auth_oauth2.scope_aliases.1.scope = rabbitmq/tag:administrator rabbitmq/read:*/* rabbitmq/write:*/* rabbitmq/configure:*/*
   auth_oauth2.https.hostname_verification = wildcard
   
   management.oauth_enabled = true
   EOF
   ```

1. **Perbarui konfigurasi broker**

   Terapkan konfigurasi baru ke broker Anda:

   ```
   # Retrieve the configuration ID
   CONFIG_ID=$(aws mq describe-broker --broker-id $BROKER_ID --query 'Configurations[0].Id' --output text)
   
   # Create a new configuration revision
   REVISION=$(aws mq update-configuration --configuration-id $CONFIG_ID --data "$(cat rabbitmq.conf | base64 --wrap=0)" --query 'LatestRevision.Revision' --output text)
   
   # Apply the configuration to the broker
   aws mq update-broker --broker-id $BROKER_ID --configuration Id=$CONFIG_ID,Revision=$REVISION
   
   # Reboot the broker to apply changes
   aws mq reboot-broker --broker-id $BROKER_ID
   ```

   Tunggu status broker kembali `RUNNING` sebelum melanjutkan ke langkah berikutnya.

1. **Dapatkan token JWT**

   Asumsikan peran IAM dan dapatkan token identitas web:

   ```
   # Assume the RabbitMqAdminRole
   ROLE_CREDS=$(aws sts assume-role --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/RabbitMqAdminRole --role-session-name rabbitmq-session)
   
   # Configure the session with temporary credentials
   export AWS_ACCESS_KEY_ID=$(echo "$ROLE_CREDS" | jq -r '.Credentials.AccessKeyId')
   export AWS_SECRET_ACCESS_KEY=$(echo "$ROLE_CREDS" | jq -r '.Credentials.SecretAccessKey')
   export AWS_SESSION_TOKEN=$(echo "$ROLE_CREDS" | jq -r '.Credentials.SessionToken')
   
   # Obtain the web identity token
   TOKEN_RESPONSE=$(aws sts get-web-identity-token \
       --audience "rabbitmq" \
       --signing-algorithm ES384 \
       --duration-seconds 300 \
       --tags Key=scope,Value="rabbitmq/tag:administrator")
   
   # Extract the token
   TOKEN=$(echo "$TOKEN_RESPONSE" | jq -r '.WebIdentityToken')
   ```

1. **Akses API Manajemen RabbitMQ**

   Gunakan token JWT untuk mengakses API Manajemen RabbitMQ:

   ```
   BROKER_URL=<broker-id>.mq.<region>.on.aws
   
   curl -u ":$TOKEN" \
       -X GET https://${BROKER_URL}/api/overview \
       -H "Content-Type: application/json"
   ```

   Respons yang berhasil mengonfirmasi bahwa otentikasi IAM berfungsi dengan benar. Tanggapan tersebut berisi informasi ikhtisar broker dalam format JSON.

1. **Connect melalui AMQP menggunakan token JWT**

   Uji konektivitas AMQP menggunakan token JWT dengan alat uji sempurna:

   ```
   BROKER_DNS=<broker-endpoint>
   CONNECTION_STRING=amqps://:${TOKEN}@${BROKER_DNS}:5671
   
   docker run -it --rm --ulimit nofile=40960:40960 pivotalrabbitmq/perf-test:latest \
       --queue-pattern 'test-queue-%d' --queue-pattern-from 1 --queue-pattern-to 1 \
       --producers 1 --consumers 1 \
       --uri ${CONNECTION_STRING} \
       --flag persistent --rate 1
   ```

   Jika Anda menerima `ACCESS_REFUSED` kesalahan, Anda dapat memecahkan masalah pengaturan konfigurasi Anda dengan menggunakan CloudWatch log untuk broker Anda. Anda dapat menemukan tautan untuk grup CloudWatch log Log untuk broker Anda di konsol Amazon MQ.

# Menggunakan otentikasi dan otorisasi LDAP untuk Amazon MQ untuk RabbitMQ
<a name="rabbitmq-ldap-tutorial"></a>

Tutorial ini menjelaskan cara mengkonfigurasi otentikasi dan otorisasi LDAP untuk Amazon MQ Anda untuk broker RabbitMQ menggunakan. AWS Managed Microsoft AD

**Topics**
+ [Prasyarat untuk mengonfigurasi otentikasi dan otorisasi LDAP](#rabbitmq-ldap-tutorial-prerequisites)
+ [Mengkonfigurasi LDAP di RabbitMQ menggunakan CLI AWS](#rabbitmq-ldap-tutorial-configure-cli)

## Prasyarat untuk mengonfigurasi otentikasi dan otorisasi LDAP
<a name="rabbitmq-ldap-tutorial-prerequisites"></a>

Anda dapat mengatur AWS sumber daya yang diperlukan dalam tutorial ini dengan menerapkan [tumpukan AWS CDK untuk Amazon MQ untuk integrasi RabbitMQ LDAP](https://github.com/aws-samples/amazon-mq-samples/blob/main/rabbitmq-samples/rabbitmq-ldap-activedirectory-sample/) dengan. AWS Managed Microsoft AD

Tumpukan CDK ini secara otomatis membuat semua AWS sumber daya yang diperlukan termasuk AWS Managed Microsoft AD, pengguna dan grup LDAP, Network Load Balancer, sertifikat, dan peran IAM. Lihat paket README untuk daftar lengkap sumber daya yang dibuat oleh tumpukan.

Jika Anda menyiapkan sumber daya secara manual alih-alih menggunakan tumpukan CDK, pastikan Anda memiliki infrastruktur yang setara sebelum mengonfigurasi LDAP di Amazon MQ Anda untuk broker RabbitMQ.

### Prasyarat untuk mengatur Amazon MQ
<a name="rabbitmq-ldap-tutorial-prerequisite-cli"></a>

AWS Versi CLI >= 2.28.23 untuk membuat penambahan nama pengguna dan kata sandi opsional selama pembuatan broker.

## Mengkonfigurasi LDAP di RabbitMQ menggunakan CLI AWS
<a name="rabbitmq-ldap-tutorial-configure-cli"></a>

Prosedur ini menggunakan AWS CLI untuk membuat dan mengkonfigurasi sumber daya yang diperlukan. Dalam prosedur berikut, pastikan untuk mengganti nilai placeholder, seperti ConfigurationId dan Revision, `<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>` dan`<2>`, dengan nilai sebenarnya.

1. Buat konfigurasi baru menggunakan perintah `create-configuration` AWS CLI seperti yang ditunjukkan pada contoh berikut.

   ```
   aws mq create-configuration \
     --name "rabbitmq-ldap-config" \
     --engine-type "RABBITMQ" \
     --engine-version "3.13"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
   "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "AuthenticationStrategy": "simple",
       "Created": "2025-07-17T16:03:01.759943+00:00",
       "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "LatestRevision": {
   "Created": "2025-07-17T16:03:01.759000+00:00",
       "Description": "Auto-generated default for rabbitmq-ldap-config on RabbitMQ 3.13",
       "Revision": 1
       },
       "Name": "rabbitmq-ldap-config"
   }
   ```

1. Buat file konfigurasi yang dipanggil `rabbitmq.conf` untuk menggunakan LDAP sebagai metode otentikasi dan otorisasi, seperti yang ditunjukkan pada contoh berikut. Ganti semua nilai placeholder dalam template (ditandai dengan`${RabbitMqLdapTestStack.*}`) dengan nilai aktual dari output tumpukan AWS CDK prasyarat yang diterapkan atau infrastruktur yang setara.

   ```
   auth_backends.1 = ldap
   
   # LDAP authentication settings - For more information,
   # see https://www.rabbitmq.com/docs/ldap#basic
   
   # FIXME: Replace the ${RabbitMqLdapTestStack.*} placeholders with actual values
   # from your deployed prerequisite CDK stack outputs.
   auth_ldap.servers.1 = ${RabbitMqLdapTestStack.NlbDnsName}
   auth_ldap.dn_lookup_bind.user_dn = ${RabbitMqLdapTestStack.DnLookupUserDn}
   auth_ldap.dn_lookup_base = ${RabbitMqLdapTestStack.DnLookupBase}
   auth_ldap.dn_lookup_attribute = ${RabbitMqLdapTestStack.DnLookupAttribute}
   auth_ldap.port = 636
   auth_ldap.use_ssl = true
   auth_ldap.ssl_options.verify = verify_peer
   auth_ldap.log = network
   
   # AWS integration for secure credential retrieval
   # - see: https://github.com/amazon-mq/rabbitmq-aws
   # The aws plugin allows RabbitMQ to securely retrieve credentials and certificates
   # from AWS services.
   
   # Replace the ${RabbitMqLdapTestStack.*} placeholders with actual ARN values
   # from your deployed prerequisite CDK stack outputs.
   aws.arns.auth_ldap.ssl_options.cacertfile = ${RabbitMqLdapTestStack.CaCertArn}
   aws.arns.auth_ldap.dn_lookup_bind.password = ${RabbitMqLdapTestStack.DnLookupUserPasswordArn}
   aws.arns.assume_role_arn = ${RabbitMqLdapTestStack.AmazonMqAssumeRoleArn}
   
   # LDAP authorization queries - For more information,
   # see: https://www.rabbitmq.com/docs/ldap#authorisation
   
   # FIXME: Replace the ${RabbitMqLdapTestStack.*} placeholders with actual group DN
   # values from your deployed prerequisite CDK stack outputs
   # Uses Active Directory groups created by the prerequisite CDK stack
   auth_ldap.queries.tags = '''
   [{administrator, {in_group, "${RabbitMqLdapTestStack.RabbitMqAdministratorsGroupDn}"}},
   {management,    {in_group, "${RabbitMqLdapTestStack.RabbitMqMonitoringUsersGroupDn}"}}]
   '''
   
   # FIXME: This provides all authenticated users access to all vhosts
   # - update to restrict access as required
   auth_ldap.queries.vhost_access = '''
   {constant, true}
   '''
   
   # FIXME: This provides all authenticated users full access to all
   # queues and exchanges - update to restrict access as required
   auth_ldap.queries.resource_access = '''
   {for, [    {permission, configure, {constant, true}},
        {permission, write,
         {for, [{resource, queue,    {constant, true}},
                {resource, exchange, {constant, true}}]}},
        {permission, read,
         {for, [{resource, exchange, {constant, true}},
                {resource, queue,    {constant, true}}]}}
       ]
   }
   '''
   
   # FIXME: This provides all authenticated users access to all topics
   # - update to restrict access as required
   auth_ldap.queries.topic_access = '''
   {for, [{permission, write, {constant, true}},
        {permission, read,  {constant, true}}
       ]
   }
   '''
   ```

1. Perbarui konfigurasi menggunakan perintah `update-configuration` AWS CLI seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, tambahkan ID konfigurasi yang Anda terima sebagai respons Langkah 1 dari prosedur ini. Misalnya, `c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca`.

   ```
   aws mq update-configuration \
     --configuration-id "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>" \
     --data "$(cat rabbitmq.conf | base64 --wrap=0)"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-b600ac8e-8183-4f74-a713-983e59f30e3d",
       "Created": "2025-07-17T16:57:04.520931+00:00",
       "Id": "c-b600ac8e-8183-4f74-a713-983e59f30e3d",
       "LatestRevision": {
           "Created": "2025-07-17T16:57:39.172000+00:00",
           "Revision": 2
       },
       "Name": "rabbitmq-ldap-config",
       "Warnings": []
   }
   ```

1. Buat broker dengan konfigurasi LDAP yang Anda buat di Langkah 2 prosedur ini. Untuk melakukan ini, gunakan perintah `create-broker` AWS CLI seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, berikan ID konfigurasi dan nomor revisi yang Anda peroleh dalam tanggapan Langkah 1 dan 2 masing-masing. Misalnya, `c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca` dan `2`.

   ```
   aws mq create-broker \
    --broker-name "rabbitmq-ldap-test-1" \
    --engine-type "RABBITMQ" \
    --engine-version "3.13" \
    --host-instance-type "mq.m7g.large" \
    --deployment-mode "CLUSTER_MULTI_AZ" \
    --logs '{"General": true}' \
    --publicly-accessible \
    --configuration '{"Id": "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>","Revision": <2>}'
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "BrokerArn": "arn:aws:mq:us-west-2:123456789012:broker:rabbitmq-ldap-broker:b-2a1b5133-a10c-49d2-879b-8c176c34cf73",
       "BrokerId": "b-2a1b5133-a10c-49d2-879b-8c176c34cf73"
   }
   ```
**Pembatasan penamaan broker**  
Peran IAM yang dibuat oleh tumpukan CDK prasyarat membatasi nama broker untuk memulai. `rabbitmq-ldap-test` Pastikan nama broker Anda mengikuti pola ini atau peran IAM tidak akan memiliki izin untuk mengambil peran untuk resolusi ARN.

1. Verifikasi bahwa status broker bertransisi dari `CREATION_IN_PROGRESS` ke`RUNNING`, menggunakan perintah `describe-broker` AWS CLI seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, berikan ID broker yang Anda peroleh dalam hasil langkah sebelumnya Misalnya,`b-2a1b5133-a10c-49d2-879b-8c176c34cf73`.

   ```
   aws mq describe-broker \
    --broker-id "<b-2a1b5133-a10c-49d2-879b-8c176c34cf73>"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut. Respons berikut adalah versi singkat dari output lengkap yang dikembalikan `describe-broker` perintah. Tanggapan ini menunjukkan status broker dan strategi otentikasi yang digunakan untuk mengamankan broker. Dalam hal ini, strategi `config_managed` otentikasi menunjukkan bahwa broker menggunakan metode otentikasi LDAP.

   ```
   {
   "AuthenticationStrategy": "config_managed",
       ...,
       "BrokerState": "RUNNING",
       ...
   }
   ```

1. Validasi akses RabbitMQ menggunakan salah satu pengguna pengujian yang dibuat oleh tumpukan CDK prasyarat

   ```
   # FIXME: Replace ${RabbitMqLdapTestStack.ConsoleUserPasswordArn} with the actual ARN from your deployed prerequisite CDK stack outputs
   CONSOLE_PASSWORD=$(aws secretsmanager get-secret-value \
     --secret-id ${RabbitMqLdapTestStack.ConsoleUserPasswordArn} \
     --query 'SecretString' --output text)
   
   # FIXME: Replace BrokerConsoleURL with the actual ConsoleURL retrieved by
   # calling describe-broker for the broker created above
   # Call management API /api/overview (should succeed)
   curl -u RabbitMqConsoleUser:$CONSOLE_PASSWORD \
     https://${BrokerConsoleURL}/api/overview
   
   # Try to create a user (should fail - console user only has monitoring permissions)
   curl -u RabbitMqConsoleUser:$CONSOLE_PASSWORD \
     -X PUT https://${BrokerConsoleURL}/api/users/testuser \
     -H "Content-Type: application/json" \
     -d '{"password":"testpass","tags":"management"}'
   ```

# Menggunakan otentikasi HTTP dan otorisasi untuk Amazon MQ untuk RabbitMQ
<a name="rabbitmq-http-tutorial"></a>

Tutorial ini menjelaskan cara mengkonfigurasi otentikasi HTTP dan otorisasi untuk Amazon MQ Anda untuk broker RabbitMQ menggunakan server HTTP eksternal.

**catatan**  
Plugin otentikasi HTTP hanya tersedia untuk Amazon MQ untuk RabbitMQ versi 4 ke atas.

**Topics**
+ [Prasyarat untuk mengonfigurasi otentikasi dan otorisasi HTTP](#rabbitmq-http-tutorial-prerequisites)
+ [Mengkonfigurasi otentikasi HTTP di RabbitMQ menggunakan CLI AWS](#rabbitmq-http-tutorial-configure-cli)

## Prasyarat untuk mengonfigurasi otentikasi dan otorisasi HTTP
<a name="rabbitmq-http-tutorial-prerequisites"></a>

Anda dapat mengatur AWS sumber daya yang diperlukan dalam tutorial ini dengan menerapkan [tumpukan AWS CDK untuk Amazon MQ untuk integrasi otentikasi HTTP RabbitMQ](https://github.com/aws-samples/amazon-mq-samples/blob/main/rabbitmq-samples/rabbitmq-http-sample/).

Tumpukan CDK ini secara otomatis membuat semua AWS sumber daya yang diperlukan termasuk server otentikasi HTTP, sertifikat, dan peran IAM. Lihat paket README untuk daftar lengkap sumber daya yang dibuat oleh tumpukan.

Jika Anda menyiapkan sumber daya secara manual alih-alih menggunakan tumpukan CDK, pastikan Anda memiliki infrastruktur yang setara sebelum mengonfigurasi otentikasi HTTP di Amazon MQ Anda untuk broker RabbitMQ.

### Prasyarat untuk mengatur Amazon MQ
<a name="rabbitmq-http-tutorial-prerequisite-cli"></a>

AWS Versi CLI >= 2.28.23 untuk membuat penambahan nama pengguna dan kata sandi opsional selama pembuatan broker.

## Mengkonfigurasi otentikasi HTTP di RabbitMQ menggunakan CLI AWS
<a name="rabbitmq-http-tutorial-configure-cli"></a>

Prosedur ini menggunakan AWS CLI untuk membuat dan mengkonfigurasi sumber daya yang diperlukan. Dalam prosedur berikut, pastikan untuk mengganti nilai placeholder dengan nilai aktualnya.

1. Buat konfigurasi baru menggunakan perintah `create-configuration` AWS CLI seperti yang ditunjukkan pada contoh berikut.

   ```
   aws mq create-configuration \
     --name "rabbitmq-http-config" \
     --engine-type "RABBITMQ" \
     --engine-version "4.2"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "AuthenticationStrategy": "simple",
       "Created": "2025-07-17T16:03:01.759943+00:00",
       "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "LatestRevision": {
           "Created": "2025-07-17T16:03:01.759000+00:00",
           "Description": "Auto-generated default for rabbitmq-http-config on RabbitMQ 4.2",
           "Revision": 1
       },
       "Name": "rabbitmq-http-config"
   }
   ```

1. Buat file konfigurasi yang dipanggil `rabbitmq.conf` untuk menggunakan HTTP sebagai metode otentikasi dan otorisasi, seperti yang ditunjukkan pada contoh berikut. Ganti semua nilai placeholder dalam template (ditandai dengan`${...}`) dengan nilai aktual dari output tumpukan AWS CDK prasyarat yang diterapkan atau infrastruktur yang setara.

   ```
   auth_backends.1 = cache
   auth_backends.2 = http
   auth_cache.cached_backend = http
   
   # HTTP authentication settings
   # For more information, see https://github.com/rabbitmq/rabbitmq-auth-backend-http
   
   # FIXME: Replace the ${...} placeholders with actual values
   # from your deployed prerequisite CDK stack outputs.
   auth_http.http_method = post
   auth_http.user_path = ${HttpServerUserPath}
   auth_http.vhost_path = ${HttpServerVhostPath}
   auth_http.resource_path = ${HttpServerResourcePath}
   auth_http.topic_path = ${HttpServerTopicPath}
   
   # TLS/HTTPS configuration
   auth_http.ssl_options.verify = verify_peer
   auth_http.ssl_options.sni = test.amazonaws.com
   
   # AWS integration for secure credential retrieval
   # For more information, see https://github.com/amazon-mq/rabbitmq-aws
   
   # Replace the ${...} placeholders with actual ARN values
   # from your deployed prerequisite CDK stack outputs.
   aws.arns.assume_role_arn = ${AmazonMqAssumeRoleArn}
   aws.arns.auth_http.ssl_options.cacertfile = ${CaCertArn}
   ```

1. Perbarui konfigurasi menggunakan perintah `update-configuration` AWS CLI. Gunakan ID konfigurasi dari Langkah 3.

   ```
   aws mq update-configuration \
     --configuration-id "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>" \
     --data "$(cat rabbitmq.conf | base64 --wrap=0)"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "Created": "2025-07-17T16:57:04.520931+00:00",
       "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "LatestRevision": {
           "Created": "2025-07-17T16:57:39.172000+00:00",
           "Revision": 2
       },
       "Name": "rabbitmq-http-config",
       "Warnings": []
   }
   ```

1. Buat broker dengan konfigurasi HTTP. Gunakan ID konfigurasi dan nomor revisi dari langkah sebelumnya.

   ```
   aws mq create-broker \
     --broker-name "rabbitmq-http-test-1" \
     --engine-type "RABBITMQ" \
     --engine-version "4.2" \
     --host-instance-type "mq.m7g.large" \
     --deployment-mode "SINGLE_INSTANCE" \
     --logs '{"General": true}' \
     --publicly-accessible \
     --configuration '{"Id": "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>","Revision": <2>}'
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "BrokerArn": "arn:aws:mq:us-west-2:123456789012:broker:rabbitmq-http-test-1:b-2a1b5133-a10c-49d2-879b-8c176c34cf73",
       "BrokerId": "b-2a1b5133-a10c-49d2-879b-8c176c34cf73"
   }
   ```

1. Verifikasi bahwa status broker bertransisi dari `CREATION_IN_PROGRESS` ke`RUNNING`, menggunakan perintah `describe-broker` AWS CLI.

   ```
   aws mq describe-broker \
     --broker-id "<b-2a1b5133-a10c-49d2-879b-8c176c34cf73>"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut. Strategi `config_managed` otentikasi menunjukkan bahwa broker menggunakan metode otentikasi HTTP.

   ```
   {
       "AuthenticationStrategy": "config_managed",
       ...,
       "BrokerState": "RUNNING",
       ...
   }
   ```

1. Validasi akses RabbitMQ menggunakan salah satu pengguna pengujian yang dibuat oleh tumpukan CDK prasyarat

   ```
   # FIXME: Replace ${RabbitMqHttpAuthElbStack.ConsoleUserPasswordArn} with the actual ARN from your deployed prerequisite CDK stack outputs
   CONSOLE_PASSWORD=$(aws secretsmanager get-secret-value \
     --secret-id ${RabbitMqHttpAuthElbStack.ConsoleUserPasswordArn} \
     --query 'SecretString' --output text)
   
   # FIXME: Replace BrokerConsoleURL with the actual ConsoleURL retrieved by
   # calling describe-broker for the broker created above
   # Call management API /api/overview (should succeed)
   curl -u RabbitMqConsoleUser:$CONSOLE_PASSWORD \
     https://${BrokerConsoleURL}/api/overview
   
   # Try to create a vhost (should fail - console user only has management permissions)
   curl -u RabbitMqConsoleUser:$CONSOLE_PASSWORD \
     -X PUT https://${BrokerConsoleURL}/api/vhosts/test-vhost \
     -H "Content-Type: application/json" \
     -d '{}'
   ```

# Menggunakan otentikasi sertifikat SSL untuk Amazon MQ untuk RabbitMQ
<a name="rabbitmq-ssl-tutorial"></a>

Tutorial ini menjelaskan cara mengonfigurasi otentikasi sertifikat SSL untuk Amazon MQ Anda untuk broker RabbitMQ menggunakan otoritas sertifikat pribadi.

**catatan**  
Plugin otentikasi sertifikat SSL hanya tersedia untuk Amazon MQ untuk RabbitMQ versi 4 ke atas.

**Topics**
+ [Prasyarat untuk mengonfigurasi otentikasi sertifikat SSL](#rabbitmq-ssl-tutorial-prerequisites)
+ [Mengkonfigurasi otentikasi sertifikat SSL di RabbitMQ menggunakan CLI AWS](#rabbitmq-ssl-tutorial-configure-cli)

## Prasyarat untuk mengonfigurasi otentikasi sertifikat SSL
<a name="rabbitmq-ssl-tutorial-prerequisites"></a>

Otentikasi sertifikat SSL menggunakan TLS bersama (mTLS) untuk mengautentikasi klien menggunakan sertifikat X.509. Anda dapat mengatur AWS sumber daya yang diperlukan dalam tutorial ini dengan menerapkan [tumpukan AWS CDK untuk Amazon MQ untuk integrasi MTLS RabbitMQ](https://github.com/aws-samples/amazon-mq-samples/blob/main/rabbitmq-samples/rabbitmq-mtls-sample/).

Tumpukan CDK ini secara otomatis membuat semua AWS sumber daya yang diperlukan termasuk otoritas sertifikat, sertifikat klien, dan peran IAM. Lihat paket README untuk daftar lengkap sumber daya yang dibuat oleh tumpukan.

**catatan**  
Sebelum menerapkan tumpukan CDK, atur variabel `RABBITMQ_TEST_USER_NAME` lingkungan. Nilai ini akan digunakan sebagai Nama Umum (CN) dalam sertifikat klien dan harus sesuai dengan nama pengguna yang Anda gunakan dalam langkah-langkah tutorial. Misalnya: `export RABBITMQ_TEST_USER_NAME="myuser"`

Jika Anda menyiapkan sumber daya secara manual alih-alih menggunakan tumpukan CDK, pastikan Anda memiliki infrastruktur yang setara sebelum mengonfigurasi otentikasi sertifikat SSL di Amazon MQ Anda untuk broker RabbitMQ.

### Prasyarat untuk mengatur Amazon MQ
<a name="rabbitmq-ssl-tutorial-prerequisite-cli"></a>

AWS Versi CLI >= 2.28.23 untuk membuat penambahan nama pengguna dan kata sandi opsional selama pembuatan broker.

## Mengkonfigurasi otentikasi sertifikat SSL di RabbitMQ menggunakan CLI AWS
<a name="rabbitmq-ssl-tutorial-configure-cli"></a>

Prosedur ini menggunakan AWS CLI untuk membuat dan mengkonfigurasi sumber daya yang diperlukan. Dalam prosedur berikut, pastikan untuk mengganti nilai placeholder, seperti ConfigurationId dan Revision, `<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>` dan`<2>`, dengan nilai sebenarnya.

1. Buat konfigurasi baru menggunakan perintah `create-configuration` AWS CLI seperti yang ditunjukkan pada contoh berikut.

   ```
   aws mq create-configuration \
     --name "rabbitmq-ssl-config" \
     --engine-type "RABBITMQ" \
     --engine-version "4.2"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "AuthenticationStrategy": "simple",
       "Created": "2025-07-17T16:03:01.759943+00:00",
       "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "LatestRevision": {
           "Created": "2025-07-17T16:03:01.759000+00:00",
           "Description": "Auto-generated default for rabbitmq-ssl-config on RabbitMQ 4.2",
           "Revision": 1
       },
       "Name": "rabbitmq-ssl-config"
   }
   ```

1. Buat file konfigurasi yang dipanggil `rabbitmq.conf` untuk menggunakan otentikasi sertifikat SSL, seperti yang ditunjukkan pada contoh berikut. Ganti semua nilai placeholder dalam template (ditandai dengan`${...}`) dengan nilai aktual dari output tumpukan AWS CDK prasyarat yang diterapkan atau infrastruktur yang setara.

   ```
   auth_mechanisms.1 = EXTERNAL
   ssl_cert_login_from = common_name
   
   auth_backends.1 = internal
   
   # Reject if no client cert
   ssl_options.verify = verify_peer
   ssl_options.fail_if_no_peer_cert = true
   
   # AWS integration for secure credential retrieval
   # For more information, see https://github.com/amazon-mq/rabbitmq-aws
   
   # FIXME: Replace the ${...} placeholders with actual ARN values
   # from your deployed prerequisite CDK stack outputs.
   aws.arns.assume_role_arn = ${AmazonMqAssumeRoleArn}
   aws.arns.ssl_options.cacertfile = ${CaCertArn}
   ```

1. Perbarui konfigurasi menggunakan perintah `update-configuration` AWS CLI seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, tambahkan ID konfigurasi yang Anda terima sebagai respons Langkah 1 dari prosedur ini. Misalnya, `c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca`.

   ```
   aws mq update-configuration \
     --configuration-id "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>" \
     --data "$(cat rabbitmq.conf | base64 --wrap=0)"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "Created": "2025-07-17T16:57:04.520931+00:00",
       "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "LatestRevision": {
           "Created": "2025-07-17T16:57:39.172000+00:00",
           "Revision": 2
       },
       "Name": "rabbitmq-ssl-config",
       "Warnings": []
   }
   ```

1. Buat broker dengan konfigurasi otentikasi sertifikat SSL yang Anda buat di Langkah 2 prosedur ini. Untuk melakukan ini, gunakan perintah `create-broker` AWS CLI seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, berikan ID konfigurasi dan nomor revisi yang Anda peroleh dalam tanggapan Langkah 1 dan 2 masing-masing. Misalnya, `c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca` dan `2`.

   ```
   aws mq create-broker \
     --broker-name "rabbitmq-ssl-test-1" \
     --engine-type "RABBITMQ" \
     --engine-version "4.2" \
     --host-instance-type "mq.m7g.large" \
     --deployment-mode "SINGLE_INSTANCE" \
     --logs '{"General": true}' \
     --publicly-accessible \
     --configuration '{"Id": "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>","Revision": <2>}' \
     --users '[{"Username":"testuser","Password":"testpassword"}]'
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "BrokerArn": "arn:aws:mq:us-west-2:123456789012:broker:rabbitmq-ssl-test-1:b-2a1b5133-a10c-49d2-879b-8c176c34cf73",
       "BrokerId": "b-2a1b5133-a10c-49d2-879b-8c176c34cf73"
   }
   ```

1. Verifikasi bahwa status broker bertransisi dari `CREATION_IN_PROGRESS` ke`RUNNING`, menggunakan perintah `describe-broker` AWS CLI seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, berikan ID broker yang Anda peroleh pada hasil langkah sebelumnya. Misalnya, `b-2a1b5133-a10c-49d2-879b-8c176c34cf73`.

   ```
   aws mq describe-broker \
     --broker-id "<b-2a1b5133-a10c-49d2-879b-8c176c34cf73>"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut. Respons berikut adalah versi singkat dari output lengkap yang dikembalikan `describe-broker` perintah. Tanggapan ini menunjukkan status broker dan strategi otentikasi yang digunakan untuk mengamankan broker. Dalam hal ini, strategi `config_managed` otentikasi menunjukkan bahwa broker menggunakan metode otentikasi sertifikat SSL.

   ```
   {
       "AuthenticationStrategy": "config_managed",
       ...,
       "BrokerState": "RUNNING",
       ...
   }
   ```

1. Verifikasi otentikasi sertifikat SSL dengan skrip berikut`ssl.sh`.

   Gunakan skrip bash ini untuk menguji konektivitas ke Amazon MQ Anda untuk broker RabbitMQ. Skrip ini menggunakan sertifikat klien Anda untuk otentikasi dan memverifikasi apakah koneksi telah dikonfigurasi dengan benar. Jika berhasil dikonfigurasi, Anda akan melihat broker Anda mempublikasikan dan menggunakan pesan.

   Jika Anda menerima `ACCESS_REFUSED` kesalahan, Anda dapat memecahkan masalah pengaturan konfigurasi Anda dengan menggunakan CloudWatch log untuk broker Anda. Anda dapat menemukan tautan untuk grup CloudWatch log untuk broker Anda di konsol Amazon MQ.

   Dalam skrip ini, Anda harus memberikan nilai-nilai berikut:
   + `USERNAME`Nama umum (CN) dari sertifikat klien Anda.
   + `CLIENT_KEYSTORE`: Jalur ke file keystore klien Anda (PKCS12 format). Jika Anda menggunakan tumpukan CDK prasyarat, jalur defaultnya adalah. `$(pwd)/certs/client-keystore.p12`
   + `KEYSTORE_PASSWORD`: Kata sandi untuk keystore klien Anda. Jika Anda menggunakan tumpukan CDK prasyarat, kata sandi defaultnya adalah. `changeit`
   + `BROKER_DNS`: Anda dapat menemukan nilai ini di bawah **Koneksi** di halaman detail broker konsol Amazon MQ.

   ```
   #! /bin/bash
   set -e
   
   # Client information
   ## FIXME: Update this value with the client ID and secret of your confidential application client
   USERNAME=<client_cert_common_name>
   CLIENT_KEYSTORE=$(pwd)/certs/client-keystore.p12
   KEYSTORE_PASSWORD=changeit
   
   BROKER_DNS=<broker_dns>
   CONNECTION_STRING=amqps://${BROKER_DNS}:5671 
   
   # Produce/consume messages using the above connection string
   QUEUES_COUNT=1
   PRODUCERS_COUNT=1
   CONSUMERS_COUNT=1
   PRODUCER_RATE=1
   
   finch run --rm --ulimit nofile=40960:40960 \
       -v ${CLIENT_KEYSTORE}:/certs/client-keystore.p12:ro \
       -e JAVA_TOOL_OPTIONS="-Djavax.net.ssl.keyStore=/certs/client-keystore.p12 -Djavax.net.ssl.keyStorePassword=${KEYSTORE_PASSWORD} -Djavax.net.ssl.keyStoreType=PKCS12" \
       pivotalrabbitmq/perf-test:latest \
       --queue-pattern 'test-queue-cert-%d' --queue-pattern-from 1 --queue-pattern-to $QUEUES_COUNT \
       --producers $PRODUCERS_COUNT --consumers $CONSUMERS_COUNT \
       --id "cert-test${QUEUES_COUNT}q${PRODUCERS_COUNT}p${CONSUMERS_COUNT}c${PRODUCER_RATE}r" \
       --uri ${CONNECTION_STRING} \
       --sasl-external \
       --use-default-ssl-context \
       --flag persistent --rate $PRODUCER_RATE
   ```

# Menggunakan mTL untuk AMQP dan endpoint manajemen
<a name="rabbitmq-mtls-tutorial"></a>

Tutorial ini menjelaskan cara mengkonfigurasi TLS bersama (mTLS) untuk koneksi klien AMQP dan antarmuka manajemen RabbitMQ menggunakan otoritas sertifikat pribadi.

**catatan**  
Penggunaan otoritas sertifikat swasta untuk mTLS hanya tersedia untuk Amazon MQ untuk RabbitMQ versi 4 ke atas.

**Topics**
+ [Prasyarat untuk mengkonfigurasi mTL](#rabbitmq-mtls-tutorial-prerequisites)
+ [Mengkonfigurasi MTL di RabbitMQ menggunakan CLI AWS](#rabbitmq-mtls-tutorial-configure-cli)

## Prasyarat untuk mengkonfigurasi mTL
<a name="rabbitmq-mtls-tutorial-prerequisites"></a>

Anda dapat mengatur AWS sumber daya yang diperlukan dalam tutorial ini dengan menerapkan [tumpukan AWS CDK untuk Amazon MQ untuk integrasi RabbitMQ MTLS](https://github.com/aws-samples/amazon-mq-samples/blob/main/rabbitmq-samples/rabbitmq-mtls-sample/) dengan.

Tumpukan CDK ini secara otomatis membuat semua AWS sumber daya yang diperlukan termasuk otoritas sertifikat, sertifikat klien, dan peran IAM. Lihat paket README untuk daftar lengkap sumber daya yang dibuat oleh tumpukan.

Jika Anda menyiapkan sumber daya secara manual alih-alih menggunakan tumpukan CDK, pastikan Anda memiliki infrastruktur yang setara sebelum mengonfigurasi mTL di Amazon MQ Anda untuk broker RabbitMQ.

### Prasyarat untuk mengatur Amazon MQ
<a name="rabbitmq-mtls-tutorial-prerequisite-cli"></a>

AWS Versi CLI >= 2.28.23 untuk membuat penambahan nama pengguna dan kata sandi opsional selama pembuatan broker.

## Mengkonfigurasi MTL di RabbitMQ menggunakan CLI AWS
<a name="rabbitmq-mtls-tutorial-configure-cli"></a>

Prosedur ini menggunakan AWS CLI untuk membuat dan mengkonfigurasi sumber daya yang diperlukan. Dalam prosedur berikut, pastikan untuk mengganti nilai placeholder, seperti ConfigurationId dan Revision, `<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>` dan`<2>`, dengan nilai sebenarnya.

1. Buat konfigurasi baru menggunakan perintah `create-configuration` AWS CLI seperti yang ditunjukkan pada contoh berikut.

   ```
   aws mq create-configuration \
     --name "rabbitmq-mtls-config" \
     --engine-type "RABBITMQ" \
     --engine-version "4.2"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "AuthenticationStrategy": "simple",
       "Created": "2025-07-17T16:03:01.759943+00:00",
       "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "LatestRevision": {
           "Created": "2025-07-17T16:03:01.759000+00:00",
           "Description": "Auto-generated default for rabbitmq-mtls-config on RabbitMQ 4.2",
           "Revision": 1
       },
       "Name": "rabbitmq-mtls-config"
   }
   ```

1. Buat file konfigurasi yang dipanggil `rabbitmq.conf` untuk mengkonfigurasi mTL untuk AMQP dan endpoint manajemen, seperti yang ditunjukkan pada contoh berikut. Ganti semua nilai placeholder dalam template (ditandai dengan`${...}`) dengan nilai aktual dari output tumpukan AWS CDK prasyarat yang diterapkan atau infrastruktur yang setara.

   ```
   auth_backends.1 = internal
   
   # TLS configuration
   ssl_options.verify = verify_peer
   ssl_options.fail_if_no_peer_cert = true
   management.ssl.verify = verify_peer
   
   # AWS integration for secure credential retrieval
   # For more information, see https://github.com/amazon-mq/rabbitmq-aws
   
   # FIXME: Replace the ${...} placeholders with actual ARN values
   # from your deployed prerequisite CDK stack outputs.
   aws.arns.assume_role_arn = ${AmazonMqAssumeRoleArn}
   aws.arns.ssl_options.cacertfile = ${CaCertArn}
   aws.arns.management.ssl.cacertfile = ${CaCertArn}
   ```

1. Perbarui konfigurasi menggunakan perintah `update-configuration` AWS CLI seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, tambahkan ID konfigurasi yang Anda terima sebagai respons Langkah 1 dari prosedur ini. Misalnya, `c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca`.

   ```
   aws mq update-configuration \
     --configuration-id "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>" \
     --data "$(cat rabbitmq.conf | base64 --wrap=0)"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "Created": "2025-07-17T16:57:04.520931+00:00",
       "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "LatestRevision": {
           "Created": "2025-07-17T16:57:39.172000+00:00",
           "Revision": 2
       },
       "Name": "rabbitmq-mtls-config",
       "Warnings": []
   }
   ```

1. Buat broker dengan konfigurasi mTLS yang Anda buat di Langkah 2 dari prosedur ini. Untuk melakukan ini, gunakan perintah `create-broker` AWS CLI seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, berikan ID konfigurasi dan nomor revisi yang Anda peroleh dalam tanggapan Langkah 1 dan 2 masing-masing. Misalnya, `c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca` dan `2`.

   ```
   aws mq create-broker \
     --broker-name "rabbitmq-mtls-test-1" \
     --engine-type "RABBITMQ" \
     --engine-version "4.2" \
     --host-instance-type "mq.m7g.large" \
     --deployment-mode "SINGLE_INSTANCE" \
     --logs '{"General": true}' \
     --publicly-accessible \
     --configuration '{"Id": "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>","Revision": <2>}' \
     --users '[{"Username":"testuser","Password":"testpassword"}]'
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut.

   ```
   {
       "BrokerArn": "arn:aws:mq:us-west-2:123456789012:broker:rabbitmq-mtls-test-1:b-2a1b5133-a10c-49d2-879b-8c176c34cf73",
       "BrokerId": "b-2a1b5133-a10c-49d2-879b-8c176c34cf73"
   }
   ```

1. Verifikasi bahwa status broker bertransisi dari `CREATION_IN_PROGRESS` ke`RUNNING`, menggunakan perintah `describe-broker` AWS CLI seperti yang ditunjukkan pada contoh berikut. Dalam perintah ini, berikan ID broker yang Anda peroleh pada hasil langkah sebelumnya. Misalnya, `b-2a1b5133-a10c-49d2-879b-8c176c34cf73`.

   ```
   aws mq describe-broker \
     --broker-id "<b-2a1b5133-a10c-49d2-879b-8c176c34cf73>"
   ```

   Perintah ini mengembalikan respon mirip dengan contoh berikut. Respons berikut adalah versi singkat dari output lengkap yang dikembalikan `describe-broker` perintah.

   ```
   {
       "AuthenticationStrategy": "simple",
       ...,
       "BrokerState": "RUNNING",
       ...
   }
   ```

1. Verifikasi otentikasi mTLS dengan skrip berikut`mtls.sh`.

   Gunakan skrip bash ini untuk menguji konektivitas ke Amazon MQ Anda untuk broker RabbitMQ. Skrip ini menggunakan sertifikat klien Anda untuk mengautentikasi dan memverifikasi apakah koneksi telah dikonfigurasi dengan benar. Jika berhasil dikonfigurasi, Anda akan melihat broker Anda mempublikasikan dan menggunakan pesan.

   Jika Anda menerima `ACCESS_REFUSED` kesalahan, Anda dapat memecahkan masalah pengaturan konfigurasi Anda dengan menggunakan CloudWatch log untuk broker Anda. Anda dapat menemukan tautan untuk grup CloudWatch log untuk broker Anda di konsol Amazon MQ.

   Dalam skrip ini, Anda harus memberikan nilai-nilai berikut:
   + `USERNAME`dan`PASSWORD`: Kredensyal pengguna RabbitMQ yang Anda buat dengan broker.
   + `CLIENT_KEYSTORE`: Jalur ke file keystore klien Anda (PKCS12 format). Jika Anda menggunakan tumpukan CDK prasyarat, jalur defaultnya adalah. `$(pwd)/certs/client-keystore.p12`
   + `KEYSTORE_PASSWORD`: Kata sandi untuk keystore klien Anda. Jika Anda menggunakan tumpukan CDK prasyarat, kata sandi defaultnya adalah. `changeit`
   + `BROKER_DNS`: Anda dapat menemukan nilai ini di bawah **Koneksi** di halaman detail broker konsol Amazon MQ.

   ```
   #! /bin/bash
   set -e
   
   # Client information
   ## FIXME: Update this value with the client ID and secret of your confidential application client
   USERNAME=<testuser>
   PASSWORD=<testpassword>
   CLIENT_KEYSTORE=$(pwd)/certs/client-keystore.p12
   KEYSTORE_PASSWORD=changeit
   
   BROKER_DNS=<broker_dns>
   CONNECTION_STRING=amqps://${USERNAME}:${PASSWORD}@${BROKER_DNS}:5671 
   
   # Produce/consume messages using the above connection string
   QUEUES_COUNT=1
   PRODUCERS_COUNT=1
   CONSUMERS_COUNT=1
   PRODUCER_RATE=1
   
   finch run --rm --ulimit nofile=40960:40960 \
       -v ${CLIENT_KEYSTORE}:/certs/client-keystore.p12:ro \
       -e JAVA_TOOL_OPTIONS="-Djavax.net.ssl.keyStore=/certs/client-keystore.p12 -Djavax.net.ssl.keyStorePassword=${KEYSTORE_PASSWORD} -Djavax.net.ssl.keyStoreType=PKCS12" \
       pivotalrabbitmq/perf-test:latest \
       --queue-pattern 'test-queue-cert-%d' --queue-pattern-from 1 --queue-pattern-to $QUEUES_COUNT \
       --producers $PRODUCERS_COUNT --consumers $CONSUMERS_COUNT \
       --id "cert-test${QUEUES_COUNT}q${PRODUCERS_COUNT}p${CONSUMERS_COUNT}c${PRODUCER_RATE}r" \
       --uri ${CONNECTION_STRING} \
       --use-default-ssl-context \
       --flag persistent --rate $PRODUCER_RATE
   ```

# Menghubungkan aplikasi JMS Anda
<a name="rabbitmq-tutorial-jms"></a>

 Tutorial ini menunjukkan cara menghubungkan aplikasi JMS Anda ke Amazon MQ untuk broker RabbitMQ menggunakan klien RabbitMQ JMS. Anda akan belajar cara membuat produser untuk mengirim pesan dan konsumen untuk menerima pesan dari antrian RabbitMQ. 

 Sebelum Anda mulai, tambahkan dependensi RabbitMQ JMS yang sesuai ke proyek Maven Anda: 

 Untuk JMS 1.1 dan 2.0: 

```
<dependencies>

  <dependency>
    <groupId>com.rabbitmq.jms</groupId>
    <artifactId>rabbitmq-jms</artifactId>
    <version>2.12.0</version>
  </dependency>

</dependencies>
```

 Untuk JMS 3.1: 

```
<dependencies>

  <dependency>
    <groupId>com.rabbitmq.jms</groupId>
    <artifactId>rabbitmq-jms</artifactId>
    <version>3.5.0</version>
  </dependency>

</dependencies>
```

## Buat produser
<a name="rabbitmq-tutorial-jms-producer"></a>

 Contoh kode berikut menunjukkan cara menulis ke antrian RabbitMQ menggunakan JMS: 

```
import jakarta.jms.*;
import com.rabbitmq.jms.admin.*;

// Setting the connection factory
RMQConnectionFactory factory = new RMQConnectionFactory();
factory.setHost(envProps.getProperty("RABBITMQ_HOST", "localhost"));
factory.setPort(Integer.parseInt(envProps.getProperty("RABBITMQ_PORT", "5672")));
factory.setUsername(envProps.getProperty("RABBITMQ_USERNAME", "guest"));
factory.setPassword(envProps.getProperty("RABBITMQ_PASSWORD", "guest"));
factory.setVirtualHost(envProps.getProperty("RABBITMQ_VIRTUAL_HOST", "/"));
factory.useSslProtocol();

connection = factory.createConnection();
connection.start();

String queueName = "test-queue-jms";
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

RMQDestination destination = new RMQDestination(queueName, true, false);

// Send the message to the queue
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);

String msg_content = "Hello World!!";
TextMessage textMessage = session.createTextMessage(msg_content);
producer.send(textMessage);

System.out.printf("Published to AMQP queue '%s': %s", queueName, msg_content);
```

## Ciptakan konsumen
<a name="rabbitmq-tutorial-jms-consumer"></a>

 Contoh kode berikut menunjukkan cara membaca dari antrian RabbitMQ menggunakan JMS: 

```
import jakarta.jms.*;
import com.rabbitmq.jms.admin.*;

// Setting the connection factory
RMQConnectionFactory factory = new RMQConnectionFactory();
factory.setHost(envProps.getProperty("RABBITMQ_HOST", "localhost"));
factory.setPort(Integer.parseInt(envProps.getProperty("RABBITMQ_PORT", "5672")));
factory.setUsername(envProps.getProperty("RABBITMQ_USERNAME", "guest"));
factory.setPassword(envProps.getProperty("RABBITMQ_PASSWORD", "guest"));
factory.setVirtualHost(envProps.getProperty("RABBITMQ_VIRTUAL_HOST", "/"));
factory.useSslProtocol();

// Establish the connection and session
jakarta.jms.Connection connection = factory.createConnection();

String queueName = "test-queue-jms";
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

RMQDestination destination = new RMQDestination();
destination.setDestinationName(queueName);
destination.setAmqp(true);
destination.setAmqpQueueName(queueName);

// Initialize consumer
MessageConsumer consumer = session.createConsumer(destination);
consumer.setMessageListener(message -> {
    try {
        if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            System.out.printf("Message: %s%n", textMessage.getText());
        } else if (message instanceof BytesMessage) {
            BytesMessage bytesMessage = (BytesMessage) message;
            byte[] bytes = new byte[(int) bytesMessage.getBodyLength()];
            bytesMessage.readBytes(bytes);
            String content = new String(bytes);
            System.out.printf("Message: %s%n", content);
        } else {
            System.out.printf("Message: [%s]%n", message.getClass().getSimpleName());
        }
    } catch (JMSException e) {
        System.err.printf("Error processing message: %s%n", e.getMessage());
    }
});

connection.start();
```