เสร็จสิ้นการแลกเปลี่ยนเมื่อรวมเข้าด้วยกัน

ฉันกำลังดึงข้อความจาก Rabbit และรวบรวมไว้ ฉันสังเกตเห็นว่าถึงแม้ autoAck=false ข้อความจะถูก ackd ทันทีที่รวมเข้าด้วยกัน ซึ่งหมายความว่าหากกระบวนการของฉันขัดข้อง ข้อความจะไม่ถูกจัดคิวใหม่อีกครั้ง

ฉันได้เสียบ leveldb java db เป็น repo การรวมซึ่งแก้ปัญหาได้ เนื่องจากฉันคิดว่ามันจะรับเฉพาะเมื่อมีการรวมและเก็บไว้ใน repo หรือไม่ พูดตามตรงว่า level-db ไม่ได้ทำให้ฉันรู้สึกสบายใจกับกิจกรรมและปัญหาของเวอร์ชัน C เดาว่าฉันสามารถเปลี่ยนไปใช้ SQL repo ได้

ดังนั้น. คำถามคือ มีอะไรที่ฉันสามารถทำได้หรือไม่ โดยที่ Camel จะตอบรับข้อความการแลกเปลี่ยนเมื่อข้อความที่รวบรวมไว้ได้เสร็จสิ้นการเดินทางแล้วเท่านั้น หลังจากการรวมเข้าด้วยกัน ขั้นตอนต่อไปของฉันคือการเขียนลงดิสก์อย่างง่าย


person Skynet5    schedule 07.07.2017    source แหล่งที่มา


คำตอบ (1)


นั่นคือโดยการออกแบบ ดังนั้นผู้รวบรวมจึงเป็น EIP แบบมีสถานะ ดังนั้นข้อความขาเข้าจึงถูกส่งไปยังผู้รวบรวม จากนั้นจึงดำเนินการต่อ และผู้ใช้ Rabbit ที่ประมวลผลข้อความจะเสร็จสมบูรณ์และได้รับการตรวจสอบ

คุณต้องเสียบปลั๊กพื้นที่เก็บข้อมูลการรวมแบบถาวรตามที่คุณพูด

เนื่องจากขั้นตอนสุดท้ายของคุณคือการเขียนลงดิสก์ ฉันจะออกแบบใหม่เพื่อให้คุณนำแต่ละข้อความจาก Rabbit และเขียนลงดิสก์ก่อน จากนั้นจึงทำอย่างอื่นจากดิสก์ -> รวม -> ดิสก์

person Claus Ibsen    schedule 07.07.2017
comment
Re: วิธีการดิสก์ แน่นอนฉันจะมีปัญหาเดียวกัน มันจะย้ายไฟล์ครั้งเดียวรวมกัน และถ้าล้มเหลวฉันจะมีปัญหา ฉันไม่สามารถสูญเสียข้อความใดๆ ดูเหมือนว่าฉันจำเป็นต้องใช้ร้านค้าถาวร...แต่ leveldb และ hawtdb ดูไม่จริงจังเพียงพอ น่าเสียดายจริง ๆ ... เนื่องจากมาจากคิวและการรับเพียงครั้งเดียวเท่านั้นจึงควรเป็นเรื่องเล็กน้อยและค่อนข้างง่ายในการเขียนด้วยตนเอง มีความคิดอื่นอีกไหม? - person Skynet5; 07.07.2017
comment
การใช้ไฟล์ธรรมดาจะดีกว่าร้านค้า leveldb เนื่องจากไฟล์ธรรมดาจะจัดการได้ง่ายกว่า และอย่างที่คุณบอกว่าคุณจะต้องจัดเก็บเป็นไฟล์ในภายหลัง - person Claus Ibsen; 07.07.2017
comment
ดังนั้นฉันจะไม่ใช้พื้นที่เก็บข้อมูลเลยในกรณีนี้ใช่ไหม rmq -> disk1 -> ผู้รวบรวม -> disk2. ฉันเดาว่าฉันพยายามที่จะเข้าใจว่าในขั้นตอนของ disk1 ผู้บริโภคจะย้ายไฟล์เมื่อกระทบกับตัวรวบรวม...ดังนั้นฉันจึงยังคงอยู่ในตำแหน่งเดิม หากระบบล่ม...สิ่งที่รวบรวมไว้จะหายไป และไฟล์ต่างๆ จะถูกย้ายไปยังไฟล์เก็บถาวร และฉันจะต้องค้นหาว่าอะไรคืออะไร - person Skynet5; 07.07.2017
comment
หลีกเลี่ยง agg repo และเพียงใช้ไฟล์ คุณมีข้อความบนดิสก์ปลอดภัย และการย้ายไฟล์กลับไปยังโฟลเดอร์ทำได้ง่ายกว่าการต้องส่งข้อความจาก rabbitmq อีกครั้ง - person Claus Ibsen; 07.07.2017
comment
จริงๆ แล้วฉันคิดว่าความเข้าใจของฉันก็คือ สิ่งนี้ไม่ได้ให้สิ่งที่ฉันต้องการสำหรับการยอมรับข้อผิดพลาด ฉันยินดีที่จะเขียนลงดิสก์จาก RMQ ก่อน แต่ข้อกำหนดการรวมของฉัน (จำกัดไฟล์ 20,000 ไฟล์ที่คุณตอบไว้ก่อนหน้านี้) จะต้องเชื่อถือได้และสามารถกู้คืนได้ด้วยตนเอง ดูเหมือนอย่างที่คุณพูด ack ro RMQ ในการส่งไปยังผู้รวบรวม แม้ว่าโดยการออกแบบแล้ว จะทำลายการสนับสนุนสำหรับกรณีการใช้งานของฉัน หากไม่รับจนกว่าการรวมกลุ่มจะเสร็จสมบูรณ์และข้อความที่เขียน ระบบอาจหยุดทำงานและ Rabbit จะทำให้ข้อความเหล่านั้นพร้อมใช้งานอีกครั้งโดยอัตโนมัติ - person Skynet5; 07.07.2017