Klien C# IBM MQ mengirimkan messageId saya sendiri

Saya mengirim pesan MQ dan mendapatkan kembali ID pesan dan ID korelasi seperti yang diharapkan, dan saya dapat menangkap respons dari pesan tertentu yang saya kirim menggunakan ID pesan yang dikembalikan oleh server MQ.

Saya memasukkan aplikasi saya ke dalam alat pengujian beban dan saya melihat bahwa dalam beberapa kasus, ID pesan yang dikembalikan oleh manajer antrian sama dengan pesan sebelumnya, dan dalam kasus ini aplikasi gagal membaca pesan berikutnya dengan ID pesan yang sama.

Saya bukan pemilik pengelola antrian dan respon dari admin adalah "buat id pesan Anda sendiri".

Bisakah saya melakukan itu? Apakah messageID harus memiliki format tertentu?

Ini kode saya:

            message = strInputMsg;
            queueMessage = new MQMessage();
            queueMessage.WriteString(message);
            queueMessage.Format = MQC.MQFMT_STRING;
            queueMessage.Expiry = timeOutExpiry;
            queueMessage.ReplyToQueueName = QueueNameExpiry;
            queuePutMessageOptions = new MQPutMessageOptions();
            queuePutMessageOptions.Options =       MQC.MQRO_COPY_MSG_ID_TO_CORREL_ID;
            queue.Put(queueMessage, queuePutMessageOptions);
            bytReturn = queueMessage.MessageId;

Jadi bisakah saya mengatur properti MessageID ke nilai ID pesan saya sendiri sebelum saya mengirim pesan, seperti di bawah ini?

queueMessage.MessageId = myOwnMessageId

person Ivan Fontalvo    schedule 01.11.2016    source sumber
comment
Saya akan merekomendasikan untuk tidak membuat ID pesan Anda sendiri. Praktik terbaiknya adalah menyalin ID Pesan permintaan ke ID Korelasi respons   -  person Stavr00    schedule 04.11.2016


Jawaban (1)


Ya, mungkin saja kode tersebut menyetel ID pesan secara eksplisit tetapi kode Anda tampaknya tidak menggunakan kembali struktur MQMD seperti yang biasanya terjadi. Kemungkinan besar hal ini didasarkan pada deskripsi dan kode Anda asalkan alat pengujian beban memutar ulang pesan yang sama beberapa kali dan mempertahankan ID Pesan saat melakukannya.

Jika MQ diizinkan untuk menyetel ID Pesan, hal ini menjamin ID tersebut menjadi unik dalam manajer antrean untuk ID yang dihasilkannya. Ini tidak menjamin GUID di banyak pengelola antrean tetapi berupaya memastikan tidak ada tabrakan dengan menyertakan 12 karakter nama QMgr di ID Pesan. Jadi meskipun kami tidak memiliki informasi mengenai alat pengujian beban mana yang digunakan dan apakah alat tersebut menggunakan pemutaran ulang pesan, kemungkinan tersebut tampaknya jauh lebih mungkin dibandingkan bahwa MQ memiliki bug yang menduplikasi ID pesan selama eksekusi konstruktor kelas .Net MQMessage().

Silakan lihat:
kelas MQMessage.NET yang mengatakan "Membuat objek MQMessage dengan informasi deskriptor pesan default..." Tentu saja, MQMD default menyebabkan QMgr menghasilkan ID Pesan.

MQMD - MsgId (MQBYTE24) yang menjelaskan dalam catatan di bagian bawah bagaimana MsgID dibuat unik dan di dalamnya bagaimana MsgID dapat dikontrol oleh aplikasi yang meletakkan pesan.

person T.Rob    schedule 02.11.2016