Java / Spring Boot 服務端示例
這是一個只有後端的 Spring Boot 示例,包括示例程式碼、配置和 HTTP 請求序列,沒有網頁,也不依賴前端。它演示你的業務後端怎樣接入 IM;客戶端的聊天可以配合已有的 H5 Demo 一起試。
構建與啟動
需要 JDK 17 以上和 Maven 3.9 以上。在 sdk/server/java 中執行 mvn clean package,再配置環境變數 IM_BASE_URL、IM_ORG_NAME、IM_APP_NAME、IM_CLIENT_ID、IM_CLIENT_SECRET,以及至少 16 位的示例訪問口令 IM_DEMO_ACCESS_TOKEN。
java -jar demo/target/im-java-demo-1.0.0-alpha.3.jar
curl -fsS http://127.0.0.1:18930/demo/api/status \
-H "X-Demo-Token: $IM_DEMO_ACCESS_TOKEN"示例預設只監聽本機地址,埠可以用 IM_JAVA_DEMO_PORT 修改;訪問根路徑返回 404。憑據只儲存在後端,示例的訪問口令只用於本機除錯。正式的業務要接入自己的身份認證和授權,不能讓任何人隨意為任意使用者簽發登入憑證,或呼叫應用級的管理操作。
示例結構與流程
| 示例 | 用途 |
|---|---|
AccountController | 建立、查詢、修改、刪除賬號,為業務使用者簽發登入憑證 |
MessageController | 傳送業務通知、查詢管理視角的歷史、撤回訊息 |
GroupController | 建群、修改群、新增成員和解散群 |
ServiceExamples / OperationsController | 好友和黑名單、推送、線上狀態,稽核、通話和頻道的列表,聊天室公告,在 Java 中上傳和下載檔案 |
CallbackReceiver | 用原始請求體校驗簽名,非同步處理事件,同步回撥中允許或拒絕 |
ApiErrors / DemoSecurity | 錯誤碼對映,以及示例介面的訪問保護 |
建議的順序:先建立兩個測試使用者,簽發登入憑證,由客戶端用它登入;再發送單聊和群聊訊息、查詢歷史、撤回訊息。用重複的使用者名稱、非法的引數、不存在的接收方可以觸發真實的失敗;用相同的 client_msg_id 重複傳送可以驗證去重。
完整的請求序列見倉庫中的 sdk/server/java/demo/requests.http。檔案的上傳和下載只給出在 Java 業務元件中呼叫的示例,不提供讀取本機任意檔案的 HTTP 介面。其他操作直接呼叫 DRClient 的 15 個服務,示例沒有為 198 個介面逐一做管理路由。
回撥
在控制台中新增一個 IM 服務能訪問到的 /im/callback 地址,設定 IM_CALLBACK_ENDPOINT_ID 和 IM_CALLBACK_SECRET,啟動示例後完成地址驗證。用示例的訪問口令請求 GET /demo/api/callbacks,可以檢視儲存在記憶體中的最近 100 條事件。正式的業務要把事件冪等地持久儲存;多個例項時要實現共享的 CallbackStore。
同步回撥 message.before_send 的示例會拒絕正文包含 [禁止发送] 的訊息;需要在控制台中開啟對應的同步回撥,才會影響真實的傳送。自動測試會區分真實的非同步事件和自己構造的帶簽名請求。在容器中執行時,回撥地址要用 IM 服務能訪問到的宿主機地址;示例不會繞過生產環境的網路限制。
測試與報告
在倉庫根目錄執行 make sdk-server-java-test,執行單元測試和 198 個介面的契約測試。如果本機已經啟動了倉庫中的測試服務(sdk/conformance/harness),還可以執行倉庫中的整合測試指令碼:它構建最新的 Jar,連真實服務驗證業務接入、失敗場景和回撥,結束後清理自己建立的資源和程序。
測試不需要瀏覽器,也不截圖;測試報告由結構化的結果和 JUnit XML 自動生成。介面的契約測試全部通過,不代表 198 個介面都在真實業務中驗證過;實際覆蓋的範圍和沒有覆蓋的部分,以測試報告為準。
