Topik ini menjelaskan penyebab dan solusi untuk error ExchangeHasDiffFields yang dilaporkan pada klien ApsaraMQ for RabbitMQ.
Deskripsi Masalah
Saat mengakses broker ApsaraMQ for RabbitMQ dari klien ApsaraMQ for RabbitMQ, error ExchangeHasDiffFields seperti ExchangeHasDiffFields[ODurable=true&NDurable=false;] dilaporkan.
Dalam informasi error, parameter yang dimulai dengan O menunjukkan nilai atribut dari exchange yang digunakan, sedangkan parameter yang dimulai dengan N menunjukkan nilai atribut dari exchange yang dideklarasikan.
Penyebab
Nilai atribut dari exchange yang digunakan tidak konsisten dengan nilai atribut dari exchange yang dideklarasikan. Tabel berikut menjelaskan parameter atribut yang mungkin tidak konsisten.
Parameter | Tipe | Deskripsi |
exchange | String | Nama exchange. |
type | String | Tipe exchange. Nilai yang valid:
|
durable | boolean | Menentukan apakah exchange bersifat durable. Nilai yang valid:
Catatan Secara default, exchange bersifat durable, baik dibuat dengan memanggil operasi API CreateExchange maupun di halaman Exchanges di Konsol ApsaraMQ for RabbitMQ. |
autoDelete | boolean | Menentukan apakah exchange dapat dihapus secara otomatis. Nilai yang valid:
Catatan Secara default, exchange tidak dihapus secara otomatis, baik dibuat dengan memanggil operasi API CreateExchange maupun di halaman Exchanges di Konsol ApsaraMQ for RabbitMQ. |
internal | boolean | Menentukan apakah exchange adalah exchange internal. Nilai default: false. Nilai yang valid:
|
arguments | Map | Parameter lain dari exchange, seperti exchange alternatif. |
Sebagai contoh, jika nilai parameter durable dari exchange yang digunakan tidak konsisten dengan nilai parameter durable dari exchange yang dideklarasikan, maka error ExchangeHasDiffFields[ODurable=true&NDurable=false;] akan dilaporkan.
Nilai parameter durable dari exchange yang digunakan adalah false.
CatatanAnda dapat memanggil operasi API ListExchanges atau melakukan operasi di halaman Exchanges di Konsol ApsaraMQ for RabbitMQ untuk mendapatkan nilai parameter atribut dari exchange yang digunakan.
Nilai parameter durable dari exchange yang dideklarasikan adalah true.
Contoh kode:
channel.exchangeDeclare("test", "direct", false, false, false, null);
Solusi
Ubah nilai yang tidak konsisten dalam kode deklarasi untuk memastikan nilainya sesuai dengan nilai dari exchange yang digunakan. Dalam contoh berikut, nilai parameter durable diubah menjadi false.
Contoh kode:
channel.exchangeDeclare("test", "direct", true, false, false, null);