昨天把基本的 Redis Pub/Sub 配置完成後,碰到了一些技術障礙,主要是因為我想用 docker compose 把我的專案在不同的 port run 起來,但可能是因為某些配置出問題,所以讓整個測試進度拖慢很多,有點本末倒置,畢竟用 docker 不是這個 lab 的必要項目,所以我今天也不堅持了,就直接在本機跑兩個專案。
其實用 IDE 跑起來很快,但最近我除了上班用 intelliJ 以外,其他時間都用 Kiro 來開發 Java,但 Kiro 的 preview 版到期了,所以又回去用 Cursor,總之就是用 vs code 來寫 Java 的概念,應該很少人會這樣吧,畢竟 intelliJ 就是開發 Java 的 IDE 王者,但它真的太吃 RAM 了,所以我就想來看看 Cursor 有沒有可以開發 Java 的 extension,還真的有,但說到底還是蠻難用的(比起 intelliJ)。
總之,啟動兩個實例的問題解決後,我又碰上一堆問題,主要是 Redis 配置問題,一開始是 RedisPubSubConfig 在調用時,Listner 之類的 invoker 沒有被初始化,之後又是 RedisConfig 序列化有問題,那邊用了 Json 序列化,但 Pub/Sub 這邊用 String,似乎是這樣兩者有衝突但一開始沒發現。
測試了非常多次都報錯,本地的 WebSocket Session 是都可以正常推送通知,這個沒有問題,但是問題出在 Redis Listner 的各種錯誤,最後把序列化問題解決就好了。
測試的步驟會是:
實際上是 8080 發送站內信,user1 的 ws session 在 8080,他直接收到了通知,8081 則是通過監聽到廣播來確認本地有 user2 的 ws session 於是也發送了 ws 消息。
今天也是跌跌撞撞地完成了文章,雖然過程很顛簸,結果也不盡完美,但當兩個 ws 客戶端在同一時間收到 ws 推送通知的那刻,我還是情不自禁的激動起來,這種被技術感動到的瞬間,不管來幾次都不會膩。