ไคลเอนต์ C # IBM MQ ส่งข้อความ ID ของฉันเอง

ฉันกำลังส่งข้อความ MQ และได้รับ messageID และ correlationID กลับมาตามที่คาดไว้ และฉันสามารถบันทึกการตอบกลับจากข้อความเฉพาะที่ฉันส่งโดยใช้ messageID ที่ส่งคืนโดยเซิร์ฟเวอร์ MQ

ฉันใส่แอปพลิเคชันของฉันลงในเครื่องมือทดสอบโหลด และพบว่าในบางกรณี ID ข้อความที่ส่งคืนโดยตัวจัดการคิวนั้นเหมือนกับข้อความก่อนหน้า และในกรณีเหล่านี้ แอปไม่สามารถอ่านข้อความถัดไปที่มี ID ข้อความเดียวกันได้

ฉันไม่ใช่เจ้าของผู้จัดการคิวและการตอบกลับจากผู้ดูแลระบบคือ "สร้างรหัสข้อความของคุณเอง"

ฉันสามารถทำสิ่งนั้นได้หรือไม่? messageID จำเป็นต้องมีรูปแบบเฉพาะหรือไม่

นี่คือรหัสของฉัน:

            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;

ฉันสามารถตั้งค่าคุณสมบัติ MessageID เป็นค่า ID ข้อความของตัวเองก่อนที่จะส่งข้อความดังที่แสดงด้านล่างได้หรือไม่

queueMessage.MessageId = myOwnMessageId

person Ivan Fontalvo    schedule 01.11.2016    source แหล่งที่มา
comment
ฉันอยากจะแนะนำให้ไม่สร้างรหัสข้อความของคุณเอง แนวปฏิบัติที่ดีที่สุดคือการคัดลอก ID ข้อความคำขอไปยัง ID สหสัมพันธ์การตอบกลับ   -  person Stavr00    schedule 04.11.2016


คำตอบ (1)


ใช่ อาจเป็นไปได้ที่โค้ดจะตั้งค่า ID ข้อความอย่างชัดเจน แต่โค้ดของคุณดูเหมือนจะไม่ได้ใช้โครงสร้าง MQMD ซ้ำซึ่งเป็นเรื่องปกติ อาจเป็นไปได้มากกว่านั้นขึ้นอยู่กับคำอธิบายและโค้ดของคุณ โดยมีเงื่อนไขว่าเครื่องมือทดสอบการโหลดเล่นซ้ำข้อความเดียวกันหลายครั้ง และรักษารหัสข้อความไว้ในขณะดำเนินการดังกล่าว

หาก MQ ได้รับอนุญาตให้ตั้งค่า ID ข้อความ จะรับประกันว่าสิ่งนี้จะไม่ซ้ำกันภายในตัวจัดการคิวสำหรับ ID ที่สร้างขึ้น ไม่รับประกัน GUID ในตัวจัดการคิวจำนวนมาก แต่พยายามให้แน่ใจว่าไม่มีการชนกันโดยรวมอักขระ 12 ตัวของชื่อ QMgr ใน ID ข้อความ ดังนั้นแม้ว่าเราจะไม่มีข้อมูลว่าใช้เครื่องมือทดสอบโหลดตัวใดอยู่ และหากใช้การเล่นข้อความซ้ำ ความเป็นไปได้นั้นก็ดูมีแนวโน้มมากกว่า MQ นั้นจะมีจุดบกพร่องที่ทำซ้ำ ID ข้อความระหว่างการดำเนินการของตัวสร้างคลาส .Net MQMessage()

โปรดดู:
คลาส MQMessage.NET ซึ่งระบุว่า "สร้างออบเจ็กต์ MQMessage พร้อมด้วยข้อมูลตัวอธิบายข้อความเริ่มต้น..." แน่นอนว่า MQMD เริ่มต้นจะทำให้ QMgr สร้าง ID ข้อความ

MQMD - MsgId (MQBYTE24) ซึ่งอธิบายในหมายเหตุด้านล่างว่า MsgID ถูกสร้างให้มีเอกลักษณ์เฉพาะตัวอย่างไร และในส่วนเนื้อหาจะควบคุมได้อย่างไรโดยแอปพลิเคชันที่ใส่ข้อความ

person T.Rob    schedule 02.11.2016