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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 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中使用的。”,

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