
AMQP
- AMQP协议是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现。
基础概念快速入门
- 每个rabbitmq-server叫做一个Broker,等着tcp连接进入。
- 在rabbitmq-server进程内有Exchange,定义了这个消息的发送类型。(一对多、直连、多对多等等)
- Queue是进程内的逻辑队列,有多个,有名字。
- Binding联系Exchane与Queue。
- Routing key由生产者指定。Binding key由消费者指定。二者联合决定一条消息的来去。



最近在研究网络层的接入问题。一些心得记录在下面:


在java下实现的xmpp开源实现,除了openfire外,tigase是另一个牛逼的项目。
实际的实验室压力下,50万人同时在线的单机,tigase的gc情况要优于openfire,而且openfire的网络层代码借鉴了不少tigase的。
下面的内容,在解剖tigase过程中所写,使用的版本是:5.2.1 (2014年7月份)。
tigase就是一个大组件框,里面所有东西基本都是组件组成的。session manager、message router、c2s connection manager…全部是组件。
ServerComponent接口是一个最小化接口,但是要去写很多代码,tigase提供了许多的现成的代码,减少去从零实现这个接口的过程。
比如extends AbstractMessageReceiver可以直接生成一个处理消息的组件。只需要实现一个processPacket方法。实现getDefaults方法,可以对系统变量进行处理。实现setProperties方法,可以去设置一些要用的变量。
processPacket方法,可以把逻辑扔到不同的cpu上去运行,以发挥服务器多核的优势。processingThreads方法返回用多少个cpu来处理。

最近在研究在特色移动互联网下通过性最好的应用层协议办法,看到很多混乱的概念和实现,54chen在对各种名词的进行了深度考察,特作记录以做区分。
最早期的时候,因为没有可以依赖的东西,能用的只有javascript的setInterval,定时循环向服务器发起请求。
优点是:服务器端啥特别的东西都不用准备,直接当http请求处理即可。缺点是:白白浪费大量的请求。
中文意思彗星,大概是想表示这是一次尾巴会拖很长的请求。

自从0.5.0之后,很长时间thrift的版本都没有动,后来似乎是换了一波人,把java代码部分接口层变动太多,以致于,在0.5.0和其他版本共同存在的情况下,问题较多,54chen特作调查,调查目标0.5.0 vs 0.9.1。
代码位置:https://github.com/54chen/thrift_test
事情的经过是这样的:
那天在使用某创业团队的APP时,输入完了微博账号还需要他自己的账号,于是就发了条微博,

然后就有人@我是不是在说小米被脱库的事。。。呵呵!
这里要讨论的是,如何让数千计的开发人员在安全防守安全编程上,得到有效的效果。有人说,我干了xx年,手上从来没有一个项目出过安全漏洞; 还有人说,我一个人做的x项目,也从来没有出现过安全漏洞; 呵呵,集体的智慧不由个人意志来控制,木桶漏水取决于最短的一块。

之前的jkiller改名为jcpu,然后再加上jmem,齐活了,线上要再遇到问题,内存和CPU之外的也没啥其他办法了。
https://github.com/54chen/jmem
用来定位莫名其妙的堆外内存问题。首先还是要先用jmap之类的看清楚是否是JVM堆内问题了再用此神物。
