码迷,mamicode.com
首页 > Web开发 > 详细

RocketMQ .NET客户端的那些坑

时间:2020-03-15 10:01:24      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:client   需要   测试的   red   服务器端   文档   封装   服务器   并且   

在一篇博文里面看到说阿里系对.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中使用的。”,

所以额,没什么说的了,友好不友好什么的,哈哈,毕竟上帝的归上帝,凯撒的归凯撒,也没啥毛病。

RocketMQ .NET客户端的那些坑

标签:client   需要   测试的   red   服务器端   文档   封装   服务器   并且   

原文地址:https://www.cnblogs.com/s5689412/p/12495850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!