UCMQ FAQ

    此文主要记录和整理了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)了解到只缓存当前读和写的数据文件,性能不随数据量增大而下降的。

你可能感兴趣的:(消息队列,uc优视,uc技术博客,UCMQ,uc开源)