RSocket & AsyncAPI
อธิบายวิธีการพื้นฐานในการใช้ /rsocket entrypoint โดยตรงก่อน จากนั้นจะเป็นวิธีการรวมโครงการแบบเลือกที่สร้าง route/request/response type และฟังก์ชันบริการใน AsyncAPI.
วิธีการใช้ RSocket adapter พื้นฐาน.
ติดตั้ง peer package เฉพาะในโปรเจกต์ที่ใช้ RSocket เท่านั้น
การใช้งานพื้นฐานไม่ต้องการ AsyncAPI generator หรือ WebFlux นำเข้า createRSocketApi จาก /rsocket และส่ง endpoint WebSocket และส่ง JWT เป็นอาร์กิวเมนต์ที่สองเท่านั้นเมื่อจำเป็น mono หรือ stream จะถูกส่งกลับเป็น RxJS Observable.
เลือก: การสร้างบริการ AsyncAPI อัตโนมัติรวมโครงการ.
กระบวนการที่เกือบจะเหมือนกับ REST
REST คือ แต่ผมไม่ต้องการให้ typed-rx-http ถูกใช้เฉพาะใน WebFlux เท่านั้น แม้ว่า backend จะไม่สร้าง Swagger โดยตรง แต่หากมี TypeScript ที่ตรงตาม OpenAPI สเปค ก็สามารถลดการเขียน URL สตริงและ request type ด้วยมือได้ RSocket client ก็ถูกสร้างขึ้นตามเหตุผลเดียวกันโดยอิงจากเอกสาร AsyncAPIใช้ และ RSocket ใช้asyncapi-rsocket.jsonอ่าน route, interaction type, request และ response schema จากเอกสารเพื่อสร้าง TypeScript type และฟังก์ชันบริการ
1. ก่อนอื่น: ตรวจสอบว่า rsocketCommonService คืออะไรด้วยโค้ดทั้งหมด.
rsocketCommonService.ts ไม่ใช่ไฟล์ที่สร้างขึ้นโดยอัตโนมัติจากไลบรารี สร้าง wrapper สำหรับ createRSocketApi ในโครงการและเก็บนโยบายการเชื่อมต่อ/JWT ไว้ในที่เดียว และทำให้บริการ RSocket ที่สร้างขึ้นนำเข้าเฉพาะ callRSocketMono/callRSocketStream เท่านั้น ด้านล่างคือโค้ดทั้งหมดของไฟล์นั้น อ่าน Authorization จาก headerStore ของบริการ REST สาธารณะ และหากไม่มีให้เรียก token API หนึ่งครั้งเพื่อเตรียม JWT และหาก JWT เปลี่ยนให้ปิดการเชื่อมต่อ RSocket ที่มีอยู่และสร้างการเชื่อมต่อใหม่.
rsocketCommonService.ts
tsหลังจากคัดลอกให้แก้ไขเส้นทางการนำเข้า headerStore, ตำแหน่ง AsyncApiTypes, เส้นทาง token API, NEXT_PUBLIC_RSOCKET_URL และ endpoint RSocket ที่แท้จริงให้ตรงกับโครงการ.
2. บทบาทตามการจัดโครงสร้างโค้ดของ rsocketCommonService.
getRSocketUrl
เซิร์ฟเวอร์จะใช้ตัวแปรสภาพแวดล้อมและเบราว์เซอร์จะสร้าง URL ws หรือ wss ตามโปรโตคอลและโฮสต์ปัจจุบัน.
fetchAuthorization
เมื่อไม่มี JWT ใน headerStore จะเรียก token API พร้อมกับ session cookie และอ่านค่าจากฟิลด์ token, accessToken หรือ jwt.
getRsoketApi
แม้ว่าจะมีคำขอหลายคำขอเข้ามาพร้อมกันก็จะแบ่งปัน Promise การค้นหา token และจะใช้การเชื่อมต่อที่มีอยู่สำหรับ JWT เดียวกัน และหาก JWT เปลี่ยนจะสร้างการเชื่อมต่อใหม่.
resetRsoketApi
เมื่อออกจากระบบหรือลบข้อมูลรับรองจะปิดการเชื่อมต่อ RSocket ปัจจุบันและรีเซ็ต JWT และ client ที่เก็บไว้.
callRSocketMono / callRSocketStream
ตรวจสอบ request และ response ด้วยประเภท route ที่สร้างขึ้น และรวม Promise การเตรียมการเชื่อมต่อเข้ากับกระแส RxJS Observable เพื่อเรียกใช้ mono หรือ stream.
3. การสร้างบริการ AsyncAPI.
generateAsyncApiRSocket.cjs
js4. การเรียกใช้ฟังก์ชันที่สร้างขึ้น.
ต่อไปนี้เป็นตัวอย่าง requestStream ทั่วไปที่รับสถานะการดำเนินการของหลายงาน โดย route string และ event type จะอยู่ใน service ที่สร้างขึ้น
BatchJobPage.tsx
tsxหาก AsyncAPI interaction คือ
ฟังก์ชันที่สร้างขึ้นจะใช้ requestResponseหากเป็นcallRSocketStreamจะใช้ requestStreamหากเป็น 3. เรียกใช้ฟังก์ชันที่สร้างขึ้นจะใช้ ฟังก์ชันทั้งสองในหน้าจอเป็น Observable แต่ stream สามารถ ถัดไปถูกเรียกหลายครั้งได้