RocketMQ .NET客戶端的那些坑


在一篇博文里面看到說阿里系對.NET不友好,這幾天搞下來深以為然,下面慢慢說。

公司最近上了項目要用RocketMQ,我就接手了.NET客戶端的工作。剛接手的時候覺得應該問題不大,畢竟RocketMQ現在也算是Apache的頂級開源項目了,網上的文檔不說是鋪天蓋地,也算是應有盡有了,所以也沒當回事。

先准備再nuget上找個客戶端的庫來跑跑看,於是建了個控制台程序,搜了一圈下來才發現事情似乎沒有想象中那么簡單。

居然只有7個可用的穩定版本的nuget包,這有點出乎我的意料了。於是秉着“最好有例子,最好有項目代碼(Github)”的思路,選了三個庫來測試,結果都不能令人滿意,下面一個一個來說。

首先是NewLife.RocketMQ,這個團隊在博客園看到過,有不少開源項目,挺好。

說回客戶端,跑完demo之后發現的問題是會消費所有未過期的消息,導致會有重復消息被拉回客戶端,所以要考慮自己處理這塊的問題,

另外因為這個客戶端是從頭寫的純托管代碼,所以相比官方的roocketmq-client來說,不完善是在所難免的,而我的目的是找到一個完善可用的客戶端,所以只能放棄。

第二個是RocketMQ-Client,是基於ikvm轉換Rocket MQ的dot net客戶端。

測試結果是不能滿足要求,因為服務端需要提供SessionCredentials,而且這塊完全沒有。

var hook = new AclClientRPCHook(new SessionCredentials("XXXX", "XXXX"));

不過我受它的思路指引,把最新的4.6.1版本的RocketMQ包下載了下來,用IKVM自己轉換了一遍,花了整整一下午時間,把所有轉換過程中的警告提示盡可能的去掉了,但是結果是。。。還是不行

盡管我的代碼完全已經可以編譯通過,並且運行,但是還是死活收不到服務器的消息回調,花了一下午也只能放棄。

最后來說說rocketmq-client-dotnet,這是一個基於官方roocketmq-client-cpp項目經過P/Invoke調用之后封裝的客戶端。

最開始測試的時候一收到消息回調就會馬上崩潰,本來是不算用它的,而且項目使用的roocketmq-client-cpp也不清楚是哪個版本的,怕太老了搭配項目上最新的4.6.1版本有問題,

但是兜兜轉轉一圈回來之后還是決定用這種方式,准備自己編譯最新版本的roocketmq-client-cpp,發布還不到半個月,配合服務器端應該沒什么問題了,不過編譯的過程也是踩坑不斷,具體過程另文再說了。

最后自己編譯了x64的Release和Debug版本,同時也解決了收到消息回調之后程序崩潰的問題,算是有了個圓滿的結果。

 

BTW:這期間我還試圖用阿里雲的RocketMQ版SDK來連接項目的RocketMQ,可是無果,不得已發了個工單問問,最終確認是“阿里雲的sdk不可以在開源的rocketmq中使用的。”,

所以額,沒什么說的了,友好不友好什么的,哈哈,畢竟上帝的歸上帝,凱撒的歸凱撒,也沒啥毛病。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM