W21回顾

本周主要在折腾ActiveMQ,这是再还技术选型太冒进的债。

故事是这样的,当时要选一个消息队列作为集成的消息总线。看了ActiveMQ,Rabbit MQ等。因为涉及到Perl,C#, Java等编程语言,所以感觉要支持STOMP比较好,当时又看到号称ActiveMQ下一代产品的Apollo号称技术更先进,性能更好,支持的STOMP协议版本更高。所以,就拍脑袋选它了。

结果用下来发现有线不稳定,就是当非正常终止Apollo后台进程后会导致不可恢复的数据库错误:

 

2014-01-08 23:12:44,879 | INFO  | DB recovered from failure. |
2014-01-08 23:12:44,880 | ERROR | Store startup failure: org.iq80.leveldb.DBException: IO error: /var/lib/mybroker/data/dirty.index/000049.sst: No such file or directory | 1437533b484

 这种情况貌似只能删除所有数据库文件才能让Apollo启动起来。这个错误是已经在Apollo项目记录在案,如APLO-282APLO-293

还要一个更为严重的问题,到JMS客户端通过OpenWire协议发一个消息到队列里然后用STOMP协议读取该消息时,Apollo不像它的前辈ActiveMQ那样会自动把二进制的OpenWire消息转成STOMP文本消息。这就意味着使用现在的Apollo会导致JMS和其他脚本语言的客户端无法互操作,也就失去了作为消息总线的意义。更要命的是项目大部分已经用Perl, C#用STOMP访问消息队列。所以,只能选择退回ActiveMQ。

故事结束,但是要做的事情一大堆。

首先,要安装配置ActiveMQ, 但是官方的安装方法太落后,干脆能够做个rpm包。幸好GitHub上已经有了原型,完善原型花了一天半,主要改进了:

  1. 同时支持32位和64位
  2. 目录结构优化,让ActiveMA更像是一个Linux的本地应用

同时,又碰到了两个棘手的问题:

  1. ActiveMQ自带的几个和wrapper相关的ELF和SO文件缺失build id note导致RPM构建失败
  2. 无缘无故的把jar文件重新打包,ActiveMQ带了几十个jar,这样一搞非常费时

然后,分别在32位和64位的机器上测试。最终的成果公布在GitHub上了。

折腾完RPM再弄ActiveMQ的管理界面,原来那个实在太土,听说它支持hawtio,正如字面意思所示,这个东西在Java管理界面里是很火的,它基于JS+HTML+REST,理论上可以管理任何Java服务器应用。hawtio有一个Chrome插件,装完就可以连ActiveMQ。试了试还真不错,界面还是挺好的。

最后,终于想定决心把生产环境中的Apollo替换成ActiveMQ。不过新问题又来了,设置了包含美元符号的管理员密码后,hawtio管理界面死活不让登陆,总是认为你的密码输得不对,实际上是后台的密码设置文件不能支持$。

解决了这些拦路虎后,总算可以测试JMS发出的消息是不是能被Perl及C#正确读取,反之亦然。结果功夫不负有心人,所有测试都通过了,但是一周时间也就耗尽了。皱眉

你可能感兴趣的:(回顾)