API มิดเดิลแวร์ส่วนใหญ่จะแสดงผลออบเจ็กต์ SdvResult เมื่อดำเนินการสำเร็จ ออบเจ็กต์นี้จะมีออบเจ็กต์ผลลัพธ์ที่คาดไว้ หากดำเนินการไม่สำเร็จ ออบเจ็กต์นี้จะมีออบเจ็กต์ SdvStatus ซึ่งบ่งชี้ถึงลักษณะการทำงานที่ไม่คาดคิดหรือสภาวะข้อผิดพลาด ซึ่งมักจะระบุด้วยรหัสข้อผิดพลาด เช่น Internal, Unavailable หรือ DataLoss
หน้านี้จะช่วยคุณแก้ปัญหารหัสข้อผิดพลาดเหล่านี้
แก้ปัญหาการลงทะเบียนและการสร้างไม่สำเร็จ
ความล้มเหลวในการลงทะเบียนและการสร้างมักเกิดขึ้นเมื่อคุณพยายามสร้างหรือลงทะเบียนบริการที่ไม่ถูกต้อง
สร้างบริการที่ 2 ไม่ได้
ข้อผิดพลาด:
ข้อผิดพลาด Internal รายการ
สาเหตุ
คุณกำลังพยายามลงทะเบียนอินสแตนซ์แพ็กเกจบริการ (ชื่อและรหัสอินสแตนซ์) เดียวกัน 2 ครั้ง
วิธีแก้ไข
อย่าพยายามลงทะเบียนอินสแตนซ์แพ็กเกจบริการเดียวกัน (ชื่อและรหัสอินสแตนซ์) 2 ครั้ง
ลบแพ็กเกจบริการที่ซ้ำกันไม่ได้
ข้อผิดพลาด:
Status(-3, EX_ILLEGAL_ARGUMENT)
สาเหตุ
คุณพยายามลบแพ็กเกจบริการที่ซ้ำกันซึ่งไม่มีอยู่
วิธีแก้ไข
อย่าพยายามลบแพ็กเกจบริการที่ซ้ำกันซึ่งไม่มีอยู่
ไม่สามารถเรียกข้อมูลอินสแตนซ์ของผู้เผยแพร่เพื่อส่งข้อความ
ข้อผิดพลาด:
การเรียก take_publisher จะแสดงผล none
สาเหตุ
คุณเรียกใช้ take_publisher 2 ครั้งสำหรับตัวแปรเดียวกันจากอินสแตนซ์แพ็กเกจบริการเดียวกัน
วิธีแก้ไข
อย่าเรียกใช้ take_publisher 2 ครั้งสำหรับตัวแปรเดียวกันจากอินสแตนซ์แพ็กเกจบริการเดียวกัน
สร้าง Subscriber, Observer, History หรือ InstantReader ไม่ได้
ข้อผิดพลาด:
ข้อผิดพลาด Unavailable รายการ
สาเหตุ
คุณพยายามสร้าง Subscriber, Observer, History หรือ InstantReader สำหรับผู้เผยแพร่โฆษณาที่ไม่มีอยู่หรือถูกยกเลิกการลงทะเบียนแล้ว
วิธีแก้ไข
ตรวจสอบว่ามีผู้เผยแพร่โฆษณาอยู่หรือลงทะเบียนแล้วก่อนที่จะพยายามสร้าง Subscriber, Observer, History หรือ InstantReader สำหรับผู้เผยแพร่โฆษณา
สร้างไคลเอ็นต์ RPC ไม่ได้
ข้อผิดพลาด:
ข้อผิดพลาด Unavailable รายการ
สาเหตุ
คุณพยายามสร้างไคลเอ็นต์ RPC สำหรับชื่อหน่วยเซิร์ฟเวอร์ที่ไม่มีอยู่หรือไม่ได้รับการลงทะเบียน
วิธีแก้ไข
ตรวจสอบว่ามีเซิร์ฟเวอร์อยู่และลงทะเบียนแล้วก่อนสร้างไคลเอ็นต์ RPC
แก้ปัญหาการสื่อสารล้มเหลว
ความล้มเหลวในการสื่อสารอาจเกิดขึ้นหลังจากที่บริการทำงานและเริ่มสื่อสารกับบริการอื่นๆ
แก้ปัญหาการยกเลิกการลงทะเบียนของผู้เผยแพร่โฆษณา
ข้อผิดพลาดอาจเกิดขึ้นเมื่อผู้เผยแพร่ยกเลิกการลงทะเบียนขณะที่ผู้อ่านยังคงใช้งานอยู่
read_next_messages ของผู้สมัครใช้บริการแสดงรายการว่างเปล่า
ข้อผิดพลาด:
read_next_messages สำเร็จแต่แสดงผลรายการที่ว่างเปล่า
สาเหตุ
ระบบจะยกเลิกการลงทะเบียนผู้เผยแพร่โฆษณาขณะที่เครื่องอ่านทำงานอยู่
วิธีแก้ไข
ใช้ Subscriber หรือ History กับสตรีมความพร้อมใช้งาน หากข้อความสุดท้ายของสตรีมความพร้อมใช้งานไม่พร้อมใช้งาน ระบบจะยกเลิกการลงทะเบียนผู้เผยแพร่และจะไม่มีข้อความใหม่
การเรียกใช้ Observer.next แสดงข้อผิดพลาดภายใน
ข้อผิดพลาด:
next แสดงผลข้อผิดพลาด Internal
สาเหตุ
ระบบจะยกเลิกการลงทะเบียนผู้เผยแพร่โฆษณาขณะที่เครื่องอ่านทำงานอยู่
วิธีแก้ไข
ใช้ผู้สมัครใช้บริการหรือประวัติการใช้งานกับสตรีมความพร้อมใช้งาน หากข้อความสุดท้ายของสตรีมความพร้อมใช้งานไม่พร้อมใช้งาน แสดงว่าผู้เผยแพร่โฆษณาหายไปและไม่มีข้อความใหม่
read_from_history ของประวัติไม่แสดงข้อความใหม่
ข้อผิดพลาด:
read_from_history จะไม่แสดงข้อความใหม่ แต่จะแสดงเฉพาะข้อความเก่าเท่านั้น
สาเหตุ
ระบบจะยกเลิกการลงทะเบียนผู้เผยแพร่โฆษณาขณะที่เครื่องอ่านทำงานอยู่
วิธีแก้ไข
ใช้ Subscriber หรือ History กับสตรีมความพร้อมใช้งาน หากข้อความสุดท้ายของสตรีมความพร้อมใช้งานไม่พร้อมใช้งาน แสดงว่าผู้เผยแพร่โฆษณาหายไปและไม่มีข้อความใหม่
InstantReader read_latest_message แสดงข้อผิดพลาดภายใน
ข้อผิดพลาด:
read_latest_message แสดงผลข้อผิดพลาด Internal
สาเหตุ
ระบบจะยกเลิกการลงทะเบียนผู้เผยแพร่โฆษณาขณะที่เครื่องอ่านทำงานอยู่
วิธีแก้ไข
ใช้ Subscriber หรือ History กับสตรีมความพร้อมใช้งาน หากข้อความสุดท้ายของสตรีมความพร้อมใช้งานไม่พร้อมใช้งาน แสดงว่าผู้เผยแพร่โฆษณาหายไปและไม่มีข้อความใหม่
แก้ปัญหาคิวข้อความว่างเปล่า
ข้อผิดพลาดอาจเกิดขึ้นเมื่อพยายามอ่านจากคิวข้อความที่ว่างเปล่า
read_next_messages ของผู้สมัครใช้บริการแสดงรายการที่ว่างเปล่า
ข้อผิดพลาด:
read_next_messages แสดงผลรายการว่างเปล่าเรียบร้อยแล้ว
สาเหตุ
ผู้เผยแพร่โฆษณาทำงานอยู่ แต่ไม่ได้ส่งข้อความ
วิธีแก้ไข
ใช้ Subscriber หรือ History กับสตรีมความพร้อมใช้งาน หากข้อความสุดท้ายของสตรีมความพร้อมใช้งานพร้อมใช้งาน แสดงว่าผู้เผยแพร่โฆษณาทำงานอยู่และไม่มีข้อความใหม่
การเรียกใช้ Observer.next แสดงข้อผิดพลาดภายใน
ข้อผิดพลาด:
next แสดงผลข้อผิดพลาด Internal
สาเหตุ
ผู้เผยแพร่โฆษณาทำงานอยู่ แต่ไม่ได้ส่งข้อความ
วิธีแก้ไข
ใช้ Subscriber หรือ History กับสตรีมความพร้อมใช้งาน หากข้อความสุดท้ายของสตรีมความพร้อมใช้งานพร้อมใช้งาน แสดงว่าผู้เผยแพร่โฆษณาทำงานอยู่และไม่มีข้อความใหม่
read_from_history ของประวัติไม่แสดงข้อความใหม่
ข้อผิดพลาด:
read_from_history แสดงผลรายการว่างเปล่าเรียบร้อยแล้ว
สาเหตุ
ผู้เผยแพร่โฆษณาทำงานอยู่ แต่ไม่ได้ส่งข้อความ
วิธีแก้ไข
ใช้ Subscriber หรือ History กับสตรีมความพร้อมใช้งาน หากข้อความสุดท้ายของสตรีมความพร้อมใช้งานพร้อมใช้งาน แสดงว่าผู้เผยแพร่โฆษณาทำงานอยู่และไม่มีข้อความใหม่
InstantReader read_latest_message แสดงข้อผิดพลาดภายใน
ข้อผิดพลาด:
read_latest_message แสดงผลข้อผิดพลาด Internal
สาเหตุ
ผู้เผยแพร่โฆษณาทำงานอยู่ แต่ไม่ได้ส่งข้อความ
วิธีแก้ไข
ใช้ Subscriber หรือ History กับสตรีมความพร้อมใช้งาน หากข้อความสุดท้ายของสตรีมความพร้อมใช้งานพร้อมใช้งาน แสดงว่าผู้เผยแพร่โฆษณาทำงานอยู่และไม่มีข้อความใหม่
แก้ปัญหาบัฟเฟอร์โอเวอร์โฟลว์หรือข้อมูลสูญหาย
ข้อผิดพลาดอาจเกิดขึ้นเมื่อผู้เผยแพร่โฆษณาส่งข้อความในอัตราที่เร็วกว่าที่ผู้อ่านจะรับได้
การอ่านครั้งแรกของผู้สมัครใช้บริการหลังจากเกิดข้อผิดพลาด Overflow จะแสดงข้อผิดพลาด DataLoss
ข้อผิดพลาด:
read_next_messages แสดงผลข้อผิดพลาด DataLoss
สาเหตุ
ผู้เผยแพร่โฆษณาส่งข้อความในอัตราที่เร็วกว่าที่ผู้อ่านจะอ่านได้ทัน
วิธีแก้ไข
การแก้ไขที่เป็นไปได้มีดังนี้
- เพิ่มบัฟเฟอร์วงแหวนของผู้เผยแพร่
capacityในคำจำกัดความสถาปัตยกรรม VSIDL เพื่อให้คิวสามารถรับข้อความที่ส่งมาจำนวนมากก่อนที่ผู้สมัครใช้บริการจะอ่านได้ - ใช้ข้อความบ่อยขึ้นในผู้สมัครใช้บริการหรือลดอัตราข้อความของผู้เผยแพร่เนื้อหา
- ใช้
InstantReaderแทนSubscriberหากบริการของคุณต้องการเฉพาะค่าข้อความล่าสุดและไม่จำเป็นต้องประมวลผลการอัปเดตระดับกลางทุกรายการ
การเรียกใช้ next ครั้งแรกของผู้สังเกตการณ์หลังจากเกิดข้อผิดพลาดโอเวอร์โฟลว์จะแสดงข้อผิดพลาด DataLoss
ข้อผิดพลาด:
next แสดงผลข้อผิดพลาด DataLoss
สาเหตุ
ผู้เผยแพร่โฆษณาส่งข้อความในอัตราที่เร็วกว่าที่ผู้อ่านจะอ่านได้ทัน
วิธีแก้ไข
การแก้ไขที่เป็นไปได้มีดังนี้
ผู้เผยแพร่โฆษณาเผยแพร่เนื้อหาในอัตราที่ช้าลง เช่น คุณอาจมีตัวแปรที่มีการประทับเวลาของข้อความล่าสุด หากเวลาปัจจุบันน้อยกว่าเวลาเผยแพร่ล่าสุดบวกกับเดลต้า คุณจะไม่เผยแพร่ข้อความ เมื่อใช้กลไกนี้ ระบบจะเผยแพร่ข้อความอย่างมาก 1 ข้อความต่อเดลต้า
Consumer จะใช้ออบเจ็กต์
InstantReadแทน Observer ออบเจ็กต์InstantReadจะไม่แสดงข้อผิดพลาดโอเวอร์โฟลว์และแสดงข้อความล่าสุดเสมอ หากข้อความสุดท้ายเป็นข้อความเดียวที่สำคัญสำหรับคุณ คุณสามารถใช้ออบเจ็กต์InstantReadแทนออบเซอร์เวอร์ได้ผู้บริโภคใช้การสุ่มตัวอย่าง หากโซลูชันของคุณมีผู้เผยแพร่ (P1) ที่เผยแพร่ข้อความเร็วกว่าที่ผู้สังเกตการณ์ (01) จะอ่านได้ คุณสามารถสร้างผู้เผยแพร่ (P2) และผู้สังเกตการณ์ (02) ใหม่เพื่อรองรับความแตกต่างของความเร็วในการเผยแพร่และการอ่านได้
ตัวอย่างเช่น สมมติว่า P1 เผยแพร่ข้อความทุกๆ 10 มิลลิวินาที แต่ O1 อ่านข้อความได้เพียง 1 ข้อความทุกๆ 100 มิลลิวินาที และทิ้งข้อความที่เหลืออีก 9 ข้อความ หากต้องการแก้ไขความคลาดเคลื่อน ให้สร้างโซลูชันที่ทำตามขั้นตอนต่อไปนี้
- P1 เผยแพร่ข้อความไปยัง O2
- O2 อ่านข้อความ 1 รายการและทิ้ง 9 รายการ
- O2 ส่งข้อความที่อ่านแล้ว 1 ข้อความไปยัง P2
- P2 ส่งข้อความที่อ่านแล้ว 1 ข้อความไปยัง O1
- O1 จะอ่านข้อความ 1 ข้อความทุกๆ 10 วินาที
โค้ดตัวอย่างต่อไปนี้แสดงวิธีใช้สถานการณ์การสุ่มตัวอย่างนี้
int discarded_message = 10; while (true) { message m = O2.read_message(); if discarded_message == 10 { discarded_message = 0; P2.publish(m); } else { discarded_message ++; } }
การอ่านประวัติไม่สมบูรณ์
ข้อผิดพลาด:
ข้อความจะหายไปก่อนที่จะคัดลอกประวัติ ไม่มีการแจ้งเตือนข้อผิดพลาดโดยตรงเมื่ออ่าน
สาเหตุ
ผู้เผยแพร่โฆษณาส่งข้อความในอัตราที่เร็วกว่าที่ผู้อ่านจะอ่านได้ทัน
วิธีแก้ไข
การแก้ไขที่เป็นไปได้มีดังนี้
- เพิ่มบัฟเฟอร์วงแหวนของผู้เผยแพร่
capacityในคำจำกัดความสถาปัตยกรรม VSIDL เพื่อให้Historyเก็บข้อความล่าสุดไว้เพียงพอสำหรับช่วงเวลาการสำรวจของผู้อ่าน - อ่านจาก
Historyบ่อยขึ้นหรือลดอัตราที่ผู้เผยแพร่ส่งข้อความ
InstantReader จะอ่านเฉพาะข้อความสุดท้าย
ข้อผิดพลาด:
ข้อความจะหายไปก่อนที่จะคัดลอกประวัติ ไม่มีการแจ้งเตือนข้อผิดพลาดโดยตรงเมื่ออ่าน
สาเหตุ
ผู้เผยแพร่โฆษณาส่งข้อความในอัตราที่เร็วกว่าที่ผู้อ่านจะอ่านได้ทัน
วิธีแก้ไข
ไม่มี
ไคลเอ็นต์ RPC เรียกใช้เมธอดและเมธอดไม่พร้อมใช้งาน
ข้อผิดพลาด:
การเรียกใช้เมธอดไม่สำเร็จเนื่องจากข้อผิดพลาด Unavailable
สาเหตุ
SDV ไม่รู้จักชื่อเซิร์ฟเวอร์และแสดงผล Unavailable มิดเดิลแวร์จะแสดงข้อผิดพลาดนี้หาก Service Discovery ไม่แสดงชื่อเซิร์ฟเวอร์ที่ถูกต้อง
วิธีแก้ไข
เริ่มแพ็กเกจบริการที่กำหนด server สำหรับอินเทอร์เฟซที่ระบุซึ่งไคลเอ็นต์ต้องการใช้
การติดตั้งใช้งานฝั่งเซิร์ฟเวอร์แสดงข้อผิดพลาด SdvStatus
ข้อผิดพลาด:
การติดตั้งใช้งานฝั่งเซิร์ฟเวอร์จะแสดงผล SdvResult ที่มีข้อผิดพลาด SdvStatus เช่น SdvStatusCode::NotFound ระบบจะส่งข้อผิดพลาดกลับไปยังไคลเอ็นต์ที่เรียกใช้
สาเหตุ
SDV และระบบการสื่อสารระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ทำงานตามที่คาดไว้ แต่ไคลเอ็นต์ส่งคำขอที่ทำให้เกิดข้อผิดพลาดในเซิร์ฟเวอร์
วิธีแก้ไข
ส่งคำขอที่ถูกต้องกับไคลเอ็นต์หรือแก้ไขเซิร์ฟเวอร์ให้ตอบสนองต่อคำขอเหล่านั้นได้สำเร็จ