zoukankan      html  css  js  c++  java
  • 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中使用的。”,

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

  • 相关阅读:
    【转载】FPGA算法设计随笔
    利用ZYNQ SOC快速打开算法验证通路(2)——数据传输最简方案:网络调试助手+W5500协议栈芯片
    学习笔记(二)——直方图均衡化和匹配
    学习笔记(一)——图像的灰度级和动态范围
    摄像头PIN脚功能作用
    详细的摄像头模组工作原理!!!
    图像处理资料分享
    图像处理大神
    gamma校正原理
    ISP基础一
  • 原文地址:https://www.cnblogs.com/s5689412/p/12495850.html
Copyright © 2011-2022 走看看