UCMQ FAQ

原创
2013/06/17 14:16
阅读数 7.3K

    此文主要记录和整理了UCMQ项目在“高手问答”中大家提到的问题。如有错漏请指正。谢谢!

源博客地址:http://tech.uc.cn/?p=1344
项目地址:https://github.com/ucweb/ucmq
使用指南:http://ucweb.github.io/ucmq_guide/



消息队列简介及应用场景相关

消息队列(Message Queue):把消息按照产生的次序加入队列,而由另外的处理程序/模块将其从队列中取出,并加以处理;从而形成了一个基本的消息队列。使用消息队列可以很好地将任务以异步的方式进行处理,或者进行数据传送和存储等。例如,当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取消息队列来异步插入。另外,还可以将较慢/较复杂的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理。

常规的使用场景短信服务、电子邮件服务图片处理服务、好友动态推送服务等。

协议相关:

使用HTTP协议单纯考虑了跨语言/跨平台和易接入。我个人觉得UCMQ的性能不需要太过担忧,大家可以看相关测试数据:http://tech.uc.cn/?p=1344 前提是UCMQ只是一个单进程单线程的服务。如果实在对性能有极高要求可以部署多个实例。

周边方案对比

1.UCMQ比起其它消息组件的长处和短处是什么。

----》答:与其他消息队列相比,延续了:协议通用性好/性能高;扩展了:易用性/数据安全性高/内存消耗小(数据缓存随读写位置移动)/易搬迁(每个队列数据独立)/易维护(轻量级)/监控简单(可实时获取“所有/单独”队列状态信息)/添加了特色的队列服务(延时队列/队列写锁等)。

使用相关

1.单个UCMQ无法满足性能要求怎么办?

---》答:如果单个实例已经到达性能瓶颈,建议部署多个实例客户端已实现负载均衡机制(轮询或随机)。

2.一般消息队列里储存的数据格式是json吗?  消费消息的时候, 从队列中取出数据, 做相应的业务处理, 请问你们是使用crontab来做定时 还是nohup呢?消费队列这块想多了解点。

----》答:消息队列中的数据可以是任意格式,对于业务来说json是个不错的选择。消费者模块可以处理完后即时再去读取队列中的新消息,如果队列取空后服务端会返回特殊的标识,消费者模块通过识别该标识休眠读取线程,建议使用定期休眠机制(如:100ms)。

3. 任务分发策略,有订阅功能吗?

----》答:UCMQ不支持订阅功能,业务不分发。相对于gearman UCMQ没有同步操作(即:生产者将消息写入队列后,队列将触发消费者来读取消息),在UCMQ中读写队列都是由客户端(包括:生产者和消费者)主动发起的,所以不是由消息队列分发。

4.发生异常时的处理流程是怎样?

----》答:如果消息生产者成功的将消息写入队列后,该消息一直有效直到被消费者成功读取或者消息体被损坏。取出后的消息将不可再访问。

5. UCMQ是怎么减少IO消耗提高读写性能的?

---》读写位置的数据都是缓存在内存中的,并随读写位置移动而移动。

6.如果不手工清理的情况下,数据量级变大后会不会对系统产生性能的影响?数据是如何进行清理的?

----》后台数据存储是分文件存储的,已读完的数据文件将被清理,所以不会消耗存储资源。从存储设计http://tech.uc.cn/?p=1344)了解到只缓存当前读和写的数据文件,性能不随数据量增大而下降的。

展开阅读全文
打赏
2
32 收藏
分享

作者的其它热门文章

加载中
shaneyuan博主

引用来自“爆炸”的评论

你好,订阅功能开发有大约时间吗?
暂未安排时间实现订阅功能。
2014/06/04 15:20
回复
举报
你好,订阅功能开发有大约时间吗?
2014/06/04 14:39
回复
举报
shaneyuan博主

引用来自“yangvxin”的评论

1.赞,尽量多来,呵呵,请教个问题,这个mq支持存储二进制数据么?
是支持二进制的。
2014/05/15 09:56
回复
举报
1.赞,尽量多来,呵呵,请教个问题,这个mq支持存储二进制数据么?
2014/05/14 14:31
回复
举报
shaneyuan博主

引用来自“roywang”的评论

最近也在做MQ服务,碰上些问题,不知道作者还上不上OSC?
1.纯内存MQ,宕机时消息丢失怎么处理?
2.持久化MQ到文件,处理之后删除,文件碎片问题怎么处理?
3.消费者的定时休眠机制好,还是阻塞的线程方式比较好?
4.入队出队1W/S的效率,数据量的大小是多少?
呵呵,之前手机安装了一个osc的app被小朋友删了。新参与的项目近尾声来看看,以后会尽量多来。 1.纯内存的mq可以考虑远程复制(避免单节点),可参考mysql等支持远程复制的系统。 2.之前的考虑的方法是,数据以日志方式顺序存储(每个队列独立,所以能确保是顺序的);数据文件分多个并保持一定规格大小,消费完后即可清理。 3.如果可以当然可以支持订阅方式,如果要求客户端轻量级,消费者定期唤醒也是一个不错的选择。这一方面功能比较齐全的有RabbitMQ。 4,UCMQ具体性能可以参阅此文:http://tech.uc.cn/?p=1344
2014/05/12 10:51
回复
举报
最近也在做MQ服务,碰上些问题,不知道作者还上不上OSC?
1.纯内存MQ,宕机时消息丢失怎么处理?
2.持久化MQ到文件,处理之后删除,文件碎片问题怎么处理?
3.消费者的定时休眠机制好,还是阻塞的线程方式比较好?
4.入队出队1W/S的效率,数据量的大小是多少?
2014/05/09 09:15
回复
举报
shaneyuan博主

引用来自“心中彩虹”的评论

@shaneyuan :您好,在您的UC技术博客上看到,您未来对UCMQ的设想,如新增:订阅模式、主从冗余/容灾处理等新功能,请问现在github上的代码,已经实现了吗?

暂未实现,后续版本计划中确实有此需求。
2013/11/19 11:04
回复
举报
@shaneyuan :您好,在您的UC技术博客上看到,您未来对UCMQ的设想,如新增:订阅模式、主从冗余/容灾处理等新功能,请问现在github上的代码,已经实现了吗?
2013/10/12 22:35
回复
举报
该评论暂时无法显示,详情咨询 QQ 群:912889742
shaneyuan博主

引用来自“maoxianfly”的评论

没有java 客户端???

只有一个简单的demo,可提高给你参考。
2013/06/18 14:31
回复
举报
更多评论
打赏
14 评论
32 收藏
2
分享
返回顶部
顶部