惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
有赞技术团队
有赞技术团队
Simon Willison's Weblog
Simon Willison's Weblog
人人都是产品经理
人人都是产品经理
L
LINUX DO - 最新话题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
A
Arctic Wolf
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
小众软件
小众软件
Jina AI
Jina AI
The Cloudflare Blog
P
Palo Alto Networks Blog
AWS News Blog
AWS News Blog
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
Know Your Adversary
Know Your Adversary
T
Threat Research - Cisco Blogs
L
Lohrmann on Cybersecurity
NISL@THU
NISL@THU
G
GRAHAM CLULEY
Project Zero
Project Zero
博客园_首页
博客园 - 三生石上(FineUI控件)
罗磊的独立博客
Spread Privacy
Spread Privacy
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
Latest news
Latest news
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tor Project blog
S
Securelist
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
IT之家
IT之家
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Last Watchdog
The Last Watchdog
T
Tenable Blog
宝玉的分享
宝玉的分享
S
Secure Thoughts
P
Privacy & Cybersecurity Law Blog
量子位
大猫的无限游戏
大猫的无限游戏
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Security Archives - TechRepublic
Security Archives - TechRepublic

博客园 - sPhinX

如何解决在Win11下卸载McgsPro失败的问题 如何离线安装WinDbg Preview 敏捷软件开发 原则、模式与实践 第9章的例子程序(C#版) Akavache简明使用指南 Oracle存储过程解析XML内容 P/Invoke继续谈 有意思的案例: 的问题 dnSpy - 让调试镜像文件的工作变得轻松点 dnSpy调试IIS(w3wp进程) Xilium.CefGlue与SingleProcess rocketmq-client-cpp(2.0.1)编译指南 P/Invoke今日谈 .NET编译问题汇总 动态的世界 使用ProcDump自动生成Dump文件 Process.Start可能无法选中指定文件的问题 获取本地IP 将exe和dll打包为一个exe文件 .NET异步资料收集
RocketMQ .NET客户端的那些坑
sPhinX · 2020-03-15 · via 博客园 - sPhinX

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

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