Topik ini menjelaskan penyebab dan metode pemecahan masalah untuk kesalahan QueueHasDiffField yang dilaporkan pada ApsaraMQ for RabbitMQ klien.
Gejala
Ketika mencoba mengakses broker ApsaraMQ for RabbitMQ dari klien ApsaraMQ for RabbitMQ, muncul kesalahan QueueHasDiffField seperti QueueHasDiffField[OAutoDelete=false&NAutoDelete=true;].
Dalam informasi kesalahan, parameter yang dimulai dengan O menunjukkan nilai atribut dari antrian yang digunakan, sedangkan parameter yang dimulai dengan N menunjukkan nilai atribut dari antrian yang dideklarasikan.
Penyebab
Nilai atribut dari antrian yang digunakan tidak konsisten dengan antrian yang dideklarasikan. Tabel berikut menjelaskan parameter atribut yang mungkin tidak konsisten.
Parameter | Tipe Data | Deskripsi |
queue | String | Nama dari antrian. |
durable | Boolean | Menentukan apakah antrian bersifat tahan lama:
Catatan Secara default, antrian bersifat persisten, terlepas dari apakah dibuat dengan memanggil operasi API CreateQueue atau melakukan operasi pada halaman Queues di ApsaraMQ for RabbitMQ console. |
exclusive | Boolean | Menentukan apakah antrian bersifat eksklusif:
|
autoDelete | Boolean | Menentukan apakah antrian dapat dihapus secara otomatis:
|
arguments | Map | Parameter lain dari antrian, termasuk dead-letter exchange, dead-letter routing key, dan message TTL. |
Sebagai contoh, jika nilai autoDelete untuk antrian yang digunakan tidak konsisten dengan antrian yang dideklarasikan, maka akan dilaporkan kesalahan QueueHasDiffField[OAutoDelete=false&NAutoDelete=true;].
Nilai autoDelete untuk antrian yang digunakan adalah false.
CatatanAnda dapat memanggil operasi API ListQueues atau melakukan operasi pada halaman Queues di ApsaraMQ for RabbitMQ console untuk mendapatkan nilai parameter atribut untuk antrian tersebut.
Nilai autoDelete untuk antrian yang dideklarasikan adalah true.
Contoh kode:
channel.queueDeclare("test", false, false, true, null);
Solusi
Ubah nilai yang tidak konsisten dalam kode deklarasi untuk memastikan nilainya sesuai dengan antrian yang digunakan. Dalam contoh ini, ubah nilai autoDelete menjadi false.
Contoh kode:
channel.queueDeclare("test", false, false, false, null);