ฉันเข้าใจว่าคำสั่งไม่ควรส่งคืนสิ่งใด
นั่นคือมุมมองหนึ่ง แต่มันไม่ได้ตั้งอยู่ในหินทั้งหมด พิจารณาเขียน (PUT, POST, DELETE) ใน HTTP - ข้อความเหล่านี้ทั้งหมดเป็นคำสั่งในแง่ที่ว่าพวกเขาเป็นข้อความที่มีการร้องขอว่าสถานะการเปลี่ยนแปลงทรัพยากรและพวกเขากลับตอบสนองทั้งหมด
ดังนั้นคุณจะจัดการข้อผิดพลาดที่นอกเหนือจาก Command Bus ได้อย่างไร (ตัวอย่างเช่นผู้ใช้ที่ลงทะเบียน 1 วินาทีก่อนหน้านี้ด้วยชื่อผู้ใช้ / อีเมลเดียวกัน)
คุณรู้ได้อย่างไรว่าคำสั่งนั้นล้มเหลวและคุณรู้ได้อย่างไรว่ามีข้อผิดพลาด?
ดังนั้นในกรณีที่คุณกำลังสื่อสารโดยตรงกับตัวจัดการคำสั่งข้อความที่ส่งคืนเป็นวิธีที่เหมาะสมอย่างยิ่งที่จะยอมรับว่าคำสั่งนั้นได้รับและประมวลผลแล้ว
หากคุณใช้มิดเดิลแวร์ชิ้นหนึ่งเช่นรถบัสที่ป้องกันไม่ให้คุณสื่อสารกับเป้าหมายโดยตรงจากนั้นฉันขอแนะนำให้คุณดูรูปแบบการส่งข้อความแบบอะซิงโครนัส - คุณจะให้ตัวจัดการคำสั่งส่งข้อความกลับไปที่ โทร?
แนวคิดหนึ่งคือการสมัครสมาชิกผลลัพธ์ของคำสั่ง สิ่งนี้ยืมมาจากแนวคิดบางอย่างในรูปแบบการรวมองค์กรของ Hohpe แนวคิดพื้นฐานคือเนื่องจากไคลเอนต์คุ้นเคยกับข้อความคำสั่งที่ถูกส่งจึงอยู่ในตำแหน่งที่ดีในการสมัครรับข่าวสารใหม่ ๆ ที่เผยแพร่อันเป็นผลมาจากข้อความคำสั่ง ตัวจัดการคำสั่งหลังจากบันทึกข้อมูลลงในสมุดบันทึกเผยแพร่กิจกรรมที่ประกาศว่าการเปลี่ยนแปลงสำเร็จและลูกค้าสมัครรับกิจกรรมเหล่านั้น - รับรู้เหตุการณ์ที่ถูกต้องโดยพิจารณาถึงความบังเอิญของตัวระบุต่าง ๆ ในข้อความ (รหัสสาเหตุรหัสสหสัมพันธ์และอื่น ๆ )
วิธีการทางเลือกนั้นค่อนข้างตรงไปกว่า หนึ่งจะรวมอยู่ในข้อความโทรกลับซึ่งสามารถเรียกใช้โดยจัดการคำสั่งหลังจากข้อความได้รับการจัดการเรียบร้อยแล้ว
ทางเลือกที่คล้ายกันมากคือการจองพื้นที่ในข้อความคำสั่งสำหรับตัวจัดการคำสั่งเพื่อเขียนการตอบรับ - เนื่องจากไคลเอนต์มีข้อความคำสั่งเป็นปัญหาวงจรเสร็จสมบูรณ์แล้ว คิดว่า " คำสัญญา " หรือ " อนาคตที่สมบูรณ์" ข้อความแจ้งให้ตัวจัดการคำสั่งทราบตำแหน่งที่จะเขียนการตอบรับ การทำเช่นนั้นจะส่งสัญญาณไปยังไคลเอนต์ (latch นับถอยหลัง) ที่มีการตอบรับ
และแน่นอนว่าคุณมีตัวเลือกเพิ่มเติมในการลบมิดเดิลแวร์ที่ดูเหมือนว่าจะได้รับไปในทางที่จะทำสิ่งที่ถูกต้องได้ง่ายๆ
ตัวอย่างเช่นผู้ใช้ที่ลงทะเบียน 1 วินาทีก่อนหน้านี้ด้วยชื่อผู้ใช้ / อีเมลเดียวกัน
หากคุณจัดการกับการลงทะเบียนผู้ใช้ idempotently นั่นไม่จำเป็นว่าจะเป็นข้อผิดพลาด - การทำซ้ำข้อความจนกว่าจะพบการตอบสนองเป็นวิธีการทั่วไปเพื่อให้มั่นใจว่ามีการส่งมอบอย่างน้อยหนึ่งครั้ง