- 浏览: 33726 次
- 性别:
- 来自: 深圳
最新评论
-
liudunxu2:
//就到目前为止,我着实没想明白下面这句代码的用途是什么? ...
MetaQ技术内幕——源码分析(八) -
zhangyou1010:
最近想看看Gecko这个框架,期待博主对Gecko的分析。
MetaQ技术内幕——源码分析(八)
文章列表
MetaQ技术内幕——源码分析(八)
- 博客分类:
- MetaQ技术内幕
上一篇以及上上篇基本介绍了MetaQ如何使用Gecko框架在网络上传输数据,今天将继续进一步介绍在Broker,各种命令的处理逻辑(暂时将不涉及到事务处理)。
依旧是在MetaMorphosisBroker的registerProcessors()方法中,我们可以注意到一点,每个Processor的实例在构造的时候都注入了一个brokerProcessor的变量,该变量的类型为CommandProcessor。其实,各个Processor的业务逻辑又委托给了CommandProcessor进行处理,比如我们看看其中的GetProcessor的源码:
public class GetP ...
MetaQ技术内幕——源码分析(七)
- 博客分类:
- MetaQ技术内幕
前面介绍了Broker在网络传输过程中使用的数据结构,同时也介绍了MetaQ使用了Gecko框架作为网络传输框架。
有人会问,Gecko什么调用MetaEncodeCommand的encode()方法,让命令变成可见的明文在网络传输,Gecko又在什么时候将网络传输 ...
MetaQ技术内幕——源码分析(六)
- 博客分类:
- MetaQ技术内幕
前几天不小心茶水泼到了笔记本上,这两天才修好,就赶紧写上一篇。
前面介绍过MetaQ使用gecko框架作为网络传输框架,Gecko采用请求/响应的方式组织传输。MetaQ依据定义了请求和响应的命令,由于命令Client和Broker均需要使用,所以放在了common工程的类MetaEncodeCommand中:
public String GET_CMD = "get"; //请求数据请求
public String RESULT_CMD = "result"; //结果响应(不包括消息)
public S ...
Broker接收从Producer(Client端)发送的消息,也能够返回消息到Consumer(Client),对于Broker来说,就是网络输入输出流的处理。
Broker使用淘宝内部的gecko框架作为网络传输框架,gecko是一个NIO框架,能够支持一下特性:
1、 可自定义协议,协议可扩展、紧凑、高效
2、 可自动管理重连,重连由客户端发起
3、 需进行心跳检测,及时发现连接失效
4、 请求应答模型应当支持同步和异步
5、 连接的分组管理,并且在重连情况下能正确处理连接的分组
6、 请求的发送应当支持四种模型: (1) 向单个连接发起请求 (2) 向分组内的 ...
MetaQ技术内幕——源码分析(四)
- 博客分类:
- MetaQ技术内幕
前面,我们已经把Broker存储最重要的一个类具体分析了一遍,接下来,我们分析一下其删除的策略。前面介绍过Messagestore采用的多文件存储的组织方式,而存储空间不可能无限大,得有一定的删除策略对其进行删除以腾出空间给新的消息。
MetaQ允许自定义删除策略,需要实现接口DeletePolicy,默认提供了两种删除策略:过期删除(DiscardDeletePolicy)和过期打包删除(ArchiveDeletePolicy)。DiscardDeletePolicy和ArchiveDeletePolicy都比较简单,DiscardDeletePolicy主要是对于超过一定时期的文 ...
前面忘了先介绍一下Broker消息存储的组织方式,我们前面知道了一条消息属于某个Topic下的某个分区,消息存储的组织方式是按照此方式进行组织的,结构图如下:
所以对于每个Topic而言,分区是最小的元素,对外API主要由MessageStore提供,一个MessageStore实例代表一个分区的实例,分区存储具体的内容。在MetaQ中,分区的存储采用的多文件的方式进行组合,即MessageStore由多个FileMessageSet组成,而FileMessageSet在MessageStore被包装成Segment,代码如下(MessageStore是值得好好分析的一个类): ...
MetaQ技术内幕——源码分析(二)
- 博客分类:
- MetaQ技术内幕
消息,是MetaQ最重要的资源,在分析MetaQ之前必须了解的概念,我们所做的一切都是围绕消息进行的,让我们看看MetaQ中消息的定义是怎样的,MetaQ的类Message定义了消息的格式:
public class Message implements Serializable {
private long id; //消息的ID
private String topic; //消息属于哪个主题
private byte[] data; //消息的内容
private String attribute; //消息的属性
private int flag ...
JMX协议的实现由IIOP和JMXMP,其连接方式有所不同:
IIOP如下:
Hashtable<String, Object> env = new Hashtable<String, Object>();
String prividerUrl = "iiop://" + host + ":" + port;
String[] credentials = new String[] { userName, userPwd };
env.clear();
env.put(Context.PROVIDER_URL, p ...
Spring中的事务控制学习中(转)
- 博客分类:
- Spring技术内幕
1.1. 有关事务(Transaction)的楔子
1.1.1. 认识事务本身
1.1.2. 初识事务家族成员
1.2. 群雄逐鹿下的Java事务管理
1.2.1. Java平台的局部事务支持
1.2.2. Java平台的分布式事务支持
1.2.2.1. 基于JTA的分布式事务管理
1.2.2.1.1. JTA编程事务管理
1.2.2.1.2. JTA声明性事务管理
MetaQ技术内幕——源码分析(一)
- 博客分类:
- MetaQ技术内幕
笔者最近在业务上需要使用到MetaQ,也借此阅读了MetaQ的相关源码,准备分享MetaQ源码分析。先扫扫盲,如果读者对MetaQ已经较为熟悉,可以跳过下一段落。
一、MetaQ简介
MetaQ(全称Metamorphosis)是一个高性能、高可用、可扩展的分布式消息中间件,,MetaQ具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景,METAQ在阿里巴巴各个子公司被广泛应用,每天转发250亿+条消息。主要应用于异步解耦,Mysql数据复制,收集日志等场景。
主要特点
生产者、服务器和消费者都可分布 ...
统一身份证自定义协议(2)
- 博客分类:
- 统一身份认证
上一篇文章介绍了自定义协议,但是从某种角度来看,上面的自定义协议并不是一个完全可靠的协议,为何?待我慢慢道来。
简单的来讲,统一身份认证应该分为两块,一是身份认证,一是统一认证(可以理解为sso),如果 ...
统一身份证自定义协议(1)
- 博客分类:
- 统一身份认证
在阅读本文前,需有一定的统一身份认证的知识,最好阅读或者使用过cas或者kerberos
1. 原理和协议
从结构上看,自定义协议包括SP、IDP Server和IDP Engine三部分(UA为浏览器)。其中IDP Server和IDP Engine独立部署,主要负责对用户进行认证,SP负责处理客户端受保护资源的访问请求,需要登录时,重定向到IDP Server。如下图所示:
图1. 协议图
前提:IDP Engine是可信的,SP首先向ID Engine注册(名称以及默认的callbackURL),生成s ...
flex编译—加入主题参数
- 博客分类:
- Actionscript
在使用flashbuilder开发flex程序的过程中,有时我们会为了支持某种主题而在flex编译器->附加的编译器参数下加入如下语句:-locale en_US -theme=${flexlib}/themes/Halo/halo.swc。但是我们不能直接使用flashbuilder生成出来的swf或者swc(存在版权问题),必须使用ant构建自己的swf或者swc。将语句-locale en_US -theme=${flexlib}/themes/Halo/halo.swc转换成ant中的表示为:
<!-- compile a mxml/as file --> ...