缘由,最近换了工作,而新的项目中使用了celery+rabbitmq来实现一个分布式任务队列系统,为了能够维护好这套系统,只能来学习一下这两个组件,顺便把学习笔记记录下来,留作以后回顾,当然如果碰巧能帮助到也在学习这两个组件的同学,那就更好了,关于celery的部分见这里。
这组笔记来源于《rabbitmq实战:高效部署分布式消息队列》
该章开篇首先介绍了为什么需要引入消息队列,通过一个简单的认证模块的例子来展示了引入消息队列之后实现了模块之间的解耦,方便扩展。
补充一下自己的想法:我认为这里举的这个认证模块的例子不太合适,因为认证模块是一个同步的模块,等待认证结果返回才能继续下来,但是引入消息队列之后会增加处理时间,还会出现消费者如果出了问题,就会导致消息阻塞,所以不如不用消息队列,个人想法,如果不对,还请指正。
1.1、消息队列的发展史
其实消息队列在1983年就已经有人提出了这种“信息总线”的思想,并付诸了实施,开发除了Teknekron,它刚开始后的客户都是金融行业,后来新闻行业也成了它的客户,因为新闻是典型的需要把消息分发给不同的客户的应用场景,然后IBM也开始研发自己的商业消息队列软件IBM MQ,但是这些都是商业软件,并非开源的,它们之间都是没有一个统一的标准的,这给用户带来了复杂性,于是后来就有许多企业连接制定了统一、开放的消息通信队列协议:AMQP,这也是这本书的主角rabbitmq的协议标准。
1.2、rabbitmq的发展史
这里介绍了rabbitmq创始人的经历,令我感到的奇怪的是,他们居然会上来就选择一个工具型的应用来进行创业,并且还成功了,这在中国是很少见的,至少现在还是很少的,更多的是应用层的创业的,其实这也是中国和国外IT的差距吧,看似繁荣的表面,其实基础软件依旧还是属于学习者。
2006年的时候rabbit technologies公司成立,这个家公司就是专门开发rabbitmq的。
其中介绍了对于开发语言的选型,为什么选择erlang,因为erlang本身是为了开发交换机而开发的语言,所以很适合rabbit,另外erlang实现分布式很方便(这个我还不太理解,没有使用过erlang)。
1.3、rabbitmq的优势
世面上这么多的消息队列软件:ActiveMQ、ZeroMQ、Kafka,那么rabbitmq和这些相比有什么优势呢?
rabbitmq是完全实现了qmap协议的、由于erlang,rabbitmq集群很方便实现、rabbitmq更稳定
1.4、安装rabbitmq
这个我建议直接查看rabbitmq的官网,介绍的很详细
第一章介绍学习完了,之前学习一个新的技术总是觉得看完了就ok了,即使写笔记也更像是“抄书”,觉得没有什么意思,但是现在想想总觉得还是希望能留下点什么,所以尽量坚持写写学习笔记,尽量把学会的东西转换为自己的语言,避免“抄书”。