当前位置:  软件>C/C++软件

HTTP协议级消息队列服务组件 UCMQ

    来源:    发布时间:2015-02-22

    本文导语:  UCMQ是一款轻量的HTTP协议级消息队列服务组件,项目的最初原型来自“张宴”的HTTPSQS。 基本特性: 支持标准的HTTP协议( GET/POST方法),支持长连接(keep-alive); 请求响应非常快速,入队列、出队列速度超过10000次/秒...

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

基本特性:

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

 

常见部署:

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

HTTP协议级消息队列服务组件 UCMQ[图片]

【UCMQ部署逻辑架构图】

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

内部结构: 

HTTP协议级消息队列服务组件 UCMQ[图片]

【UCMQ内部结构图】

 【说明】

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

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

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

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

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

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

存储设计:

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

HTTP协议级消息队列服务组件 UCMQ[图片]

【UCMQ存储设计图】


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux c socket http编程 返回http消息体出错!
  • java命名空间javax.xml.ws.http接口httpbinding成员方法: http_binding定义参考
  • 防病毒的HTTP代理服务器 HTTP Anti Virus Proxy
  • java命名空间java.net枚举proxy.type的类成员方法: http定义及介绍
  • HTTP开发工具包 http-kit
  • java命名空间javax.print.attribute.standard类referenceurischemessupported的类成员方法: http定义及介绍
  • Java HTTP客户端 http4j
  • java命名空间java.net类httpurlconnection的类成员方法: http_accepted定义及介绍
  • 如何设置服务器, 使http://localhost/hello.php变成http://www.example.com/hello.php生效?
  • java命名空间java.net类httpurlconnection的类成员方法: http_unauthorized定义及介绍
  • Java HTTP 客户端开发包 jcabi-http
  • java命名空间java.net类httpurlconnection的类成员方法: http_created定义及介绍
  • 请问如何在c程序里调用一段http地址,比如http://test/reload.jsp
  • java命名空间java.net类httpurlconnection的类成员方法: http_forbidden定义及介绍
  • 为什么输http://www.china-java.net,会自动改为http://www.china-java.net:8081?
  • java命名空间java.net类httpurlconnection的类成员方法: http_gone定义及介绍
  • http协议中文分词 http-scws
  • java命名空间java.net类httpurlconnection的类成员方法: http_ok定义及介绍
  • MM求助:怎样多线程下载http://java.sun.com上的东东? 用http方式,谢谢了.
  • java命名空间java.net类httpurlconnection的类成员方法: http_conflict定义及介绍
  • 异步 HTTP 客户端开发包 android-async-http
  • java命名空间java.net类httpurlconnection的类成员方法: http_reset定义及介绍
  • Apache在本地能够访问到http服务,用127.0.0.1,为什么在局域网访问不到http服务呢?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3