UCMQ 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
UCMQ 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
UCMQ 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
UCMQ 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
UCMQ 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 GPLv2
开发语言 C/C++
操作系统 Linux
软件类型 开源软件
开源组织
地区 国产
投 递 者 红薯
适用人群 未知
收录时间 2013-06-08

软件简介

UCMQ 是一款轻量的HTTP协议级消息队列服务组件,项目的最初原型来自“张宴”的HTTPSQS

基本特性:

  • 支持标准的HTTP协议( GET/POST方法),支持长连接(keep-alive);
  • 请求响应非常快速,入队列、出队列速度超过10000次/秒;
  • 每个UCMQ实例支持多队列,队列通过操作接口自动创建;
  • 单个队列默认限制存储100w未读消息,可以不限制(非必要建议限制);
  • 可以在不停止服务的情况下便捷地修改单个队列的属性(大小限制/只读锁/延时队列/同步频率);
  • 可以实时查看队列属性(入队列数量、出队列数量、未读消息数量、消息积压数量)。
  • 每个队列有独立的数据文件易管理易搬迁。

常见部署:

UCMQ逻辑架构中通常会涉及到三个角色:生产者(producer)/异步消息队列(UCMQ)/消费者(consumer),而三者间都以http协议作为通讯方式,如下图:

逻辑部署图

【UCMQ部署逻辑架构图】

【说明】 在整个部署架构中“生产者”和“消费者”都被视为UCMQ的客户端。“生产者”和“消费者”通过设定的负载均衡机制访问UCMQ服务端。每个客户端(生产 者/消费者)均可注册一个或多个服务端(在客户端配置文件添加每个UCMQ服务端监听地址),如果注册多个则可以“业务容灾”和“负载均衡”。

内部结构: 

MQ内部模块图(主备)

【UCMQ内部结构图】

 【说明】

控制模块:负责UCMQ内部流程的控制;

主从复制模块:将数据变更使用binlog方式同步到备机实现容灾(本版本暂不实现);

http协议处理模块:http处理模块负责http协议的解析和封装;

libevent网络事件驱动模块:负责异步事件的接收和分发;

MQ队列管理模块:管理所有队列的rtag信息和队列使用状态信息;

数据存储模块:负责消息持久化(当前数据文件mmap到缓存,所以持久化由系统 辅助完成),清理垃圾数据文件(一个队列中可有多个文件);负责准确和完整的存/取队列的rtag信息。

存储设计

由于HTTP_SQS项目是基于TC存储数据,众所周知TC的数据文件是从头开始map到缓存的,由于数据量的扩大不能被缓存的数据将很大程度上影 响服务的性能和稳定性。所以UCMQ摒弃了TC,使用日志文件方式存储消息,数据缓存被顺序读取至内存中,且缓存区域随读写指针移动,这样既节省了内存使 用也保证了性能。设计原理如图: 

数据存储模块图

【UCMQ存储设计图】

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (6)

加载中
来自UC的HTTP消息队列服务组件 —— UCMQ
2013/06/08 12:48
回复
举报
这个速度的限制会不会更多是在 HTTP 这层上呢? UCMQ
2013/06/08 12:58
回复
举报
选择HTTP的理由是? UCMQ
2013/06/08 13:39
回复
举报
这图是用什么软件画的? UCMQ
2013/06/09 11:03
回复
举报
靠谱 UCMQ
2013/06/09 12:36
回复
举报
比“张宴”的HTTPSQS 好在哪些地方呢? UCMQ
2013/08/23 21:15
回复
举报
更多评论
暂无内容
发表了博客
2013/06/17 14:16

UCMQ FAQ

此文主要记录和整理了UCMQ项目在“高手问答”中大家提到的问题。如有错漏请指正。谢谢! 源博客地址:http://tech.uc.cn/?p=1344 项目地址:https://github.com/ucweb/ucmq 使用指南:http://ucweb.github.io/ucmq_guide/ 消息队列简介及应用场景相关: 消息队列(Message Queue):把消息按照产生的次序加入队列,而由另外的处理程序/模块将其从队列中取出,并加以处理;从而形成了一个基本的消息队列。使用消息队列可以很好地...

14
32
发表了博客
2013/06/27 11:26

轻量级消息队列

1. UCMQ简介 UCMQ是一款支持简单HTTP协议的轻量级消息队列服务,基本特性如下: l 支持HTTP协议的GET/POST方法,支持长连接(keep-alive); l 请求响应非常快速,入队列、出队列速度超过10000次/秒; l 每个UCMQ实例支持多队列,队列通过操作接口自动创建; l 单个队列支持的最大消息数量(未取出的)可以不限制,默认限制在1百万以内; l 可以在不停止服务的情况下便捷地修改单个队列的属性; l 可以实时查看队列属性(入队列...

1
17
发表于DevOps专区
2013/12/29 16:42

支撑高并发业务的开源项目精选(不断更新中)

Web服务器: Nginx ----------- 动态脚本语言: PHP/Python ----------- WEB缓存系统: Varnish ----------- 负载均衡: HAProxy ----------- NoSQL及K/V缓存系统: Memcached/Redis/MongoDB/CouchDB/Cassandra/HBase ----------- 消息队列/任务调度: ActiveMQ/RabbitMQ/beanstalkd/UCMQ(国人项目)/Gearman ----------- 压力测试: Tsung...

0
3
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了问答
2014/09/02 16:24

关于UCMQ数据可靠性的问题

@shaneyuan 你好,想跟你请教个问题:UCMQ支持主从同步吗?主从同步支持同步双写吗?

1
0
发表了问答
2014/05/12 16:10

消息队列如何选型,各有什么优缺点,和适用场景

,想知道这几个的优缺点和适用场景! 求指导。

10
5
发表了问答
2013/07/12 22:41

UCMQ客户端php代码如何实现多实例负载均衡

@shaneyuan 你好,想跟你请教个问题:UCMQ客户端php代码如何实现多实例负载均衡

3
0
发表了问答
2013/07/17 18:56

ucmq多实例负载均衡

@shaneyuan 你好,想跟你请教个问题: 博主的博客原文: 每个客户端(生产 者/消费者)均可注册一个或多个服务端(在客户端配置文件添加每个UCMQ服务端监听地址),如果注册多个则可以“业务容灾”和“负载均衡”。 问:找遍了ucmq的客户端代码,没有发现多实例负载均衡的实现方式,难道是博主忽悠人?根本就没有“业务容灾”和“负载均衡”这个功能?大神的回复一般都是简洁的,简洁得人看不懂!!!

2
0
发表了问答
2013/06/17 10:51

OSChina 第 37 期高手问答 —— 消息队列服务

OSCHINA 本期高手问答我们请来了 @shaneyuan 为大家解答关于消息队列服务应用和开发方面的问题。 @shaneyuan 现就职于广州 UC 公司,是 UCMQ 的作者。 UCMQ是一款轻量的HTTP协议级消息队列服务组件,项目的最初原型来自 @张宴 的HTTPSQS。 基本特性: 支持标准的HTTP协议( GET/POST方法),支持长连接(keep-alive); 请求响应非常快速,入队列、出队列速度超过10000次/秒; 每个UCMQ实例支持多队列,队列通过操作接口自动创建;...

141
53
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
6 评论
313 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部