转 http://www.cnblogs.com/me-sa/archive/2012/10/17/rabbitmq_for_the_first_sight.html

最近在项目中实践RabbitMQ,比较幸运现在除了官方网站,还有一本非常棒的书可以读:RabbitMQ in Action;这本书目前还没有中文版或者影印版,但是从网上很容易找到PDF版本和epub mobi的版本.RabbitMQ上有关于这本书的介绍文章.从本文开始我会陆续把学习实践过程中的收获记录分享出来.

What is RabbitMQ?

  • Robust messaging for applications
  • Easy to use
  • Runs on all major operating systems
  • Supports a huge number of developer platforms
  • Open source and commercially supported

What for?

从概念上讲,RabbitMQ解决的是应用程序之间互联(connect)和规模(scale)的问题,消息发送和接收是隔离,发送方不知道消息最终由谁接收,接收方也不必关心消息是谁步发出的;发送和接收是隔离的,消息本质上就是异步的.这种隔离也就解耦了应用程序之间的依赖.RabbitMQ的角色就是应用程序中间的路由器.

规模(scale),应用程序解除了相互依赖之后从业务层面更容易做扩展,而Erlang的先天优势让代码层面的开发也更容易.

Why RabbitMQ?

摘录两段吧,第一段来自<RabbitMQ in Action>,第二段来自那篇很有名的<Rabbits and warrens>(后面我们还会提到它):

 [第一段]

Today, RabbitMQ isn’t the only game in town for open messaging. Options like ActiveMQ, ZeroMQ, and Apache Qpid all providing different open source approaches to message queuing. The question is, why do we think you should pick RabbitMQ?

  • Except for Qpid, RabbitMQ is the only broker implementing the AMQP open standard.
  • Clustering is ridiculously simple on RabbitMQ because of Erlang.
  • Your mileage may vary, but we’ve found RabbitMQ to be far more reliable and crash resistant than its competitors.
  • Perhaps the most important reason is that RabbitMQ is incredibly easy to install and use. Whether you need a simple one-node setup for your workstation, or a seven server cluster to power your web infrastructure, RabbitMQ can be up and running in about 30 minutes. With that in mind, it’s about time we fired up the little critter.

 

[第二段]

Cutting to the chase, over the last 4 years there have been no shortage of open-source message queueing servers written. Most of them are one-offs by folks like LiveJournal to scratch a particular itch. Yeah, they don’t really care what kind of messages they carry, but their design parameters are usually creator-specific (and message persistence after a crash usually isn’t one of them). However, there are three in-particular, that are designed to be highly flexible message queues for their own sake:

  • Apache ActiveMQ
  • ZeroMQ
  • RabbitMQ

Apache ActiveMQ gets the most press, but it appears to have some issues not losing messages. Next.

ZeroMQ and RabbitMQ both support an open messaging protocol called AMQP. The advantage to AMQP is that it’s designed to be a highly-robust and open alternative to the two commercial message queues out there (IBM and Tibco). Muy bueno. However, ZeroMQ doesn’t support message persistence across crashes reboots. No muy bueno. That leaves us with RabbitMQ. (That being said if you don’t need persistence ZeroMQ is pretty darn interesting…incredibly low latency and flexible topologies).

Why Erlang?

RabbitMQ的设计目标是实现开源版本的AMQP,在RabbitMQ在设计之初,两位设计者对于使用Erlang能否达到预期目标提出了三个关键问题:

  1. Would large financial institutions care whether their messaging broker was written in Erlang?

  2. Was Erlang really a good choice for writing an AMQP server?

  3. If it was written in Erlang, would that slow down adoption in the open source community?

即:大金融机构是否在意选择Erlang作为消息broker的开发语言;Erlang是否是开发AMQP服务的合适之选;使用Erlang,开源社区是否能够快速的接受.这三个问题的解答很有意思,首先金融公司表示他们不在意用什么语言开发只要能帮助他们减少集成成本即可;第二个问题Erlang Solutions公司的Francesco Cesarini (这位就是著名的袋鼠书的作者之一)给出了的解答:他分析了AMQP的协议,协议规格说明里面描述的架构遍布电话交换机系统,而Erlang就是起源于电信行业(点击维基百科了解Erlang),是针对电信领域的做的设计,这个在Joe Armstrong的论文中也有详细的背景介绍,所以Erlang几乎是构建AMQP Broker的不二之选.

最后一个问题的验证需要相当长的时间,这个已经由另外一个产品来验证了:ejabberd.ejabberd实现了即时消息通信协议XMPP协议,XMPP(Extensible Messaging and Presence Protocol).ejabberd被广泛使用,并没有负面的消息爆出.所以第三个问题也侧面得到了回答.

其实这里还可以补充两条Erlang的优势:相比其他语言构建集群简单,崩溃恢复容易.这两点可以说是Erlang与生俱来的优势.

Who Use MQ

列举几个使用消息队列的产品(不一定是使用RabbitMQ哦),slideshare上的信息更多一些,可惜被ping了,这里只罗列几个国内的:

首先必须是淘宝,淘宝数据库研发组的资料共享太给力了: http://mysql.taobao.org/index.php/Rabbitmq

  • 构建可扩展微博架构  http://wenku.baidu.com/view/6cba78cda1c7aa00b52acbc2.html

  • 米聊服务器的技术选型和架构设计 http://wenku.baidu.com/view/c51d700cf78a6529647d53e8.html

  • 虎扑网架构升级之路 http://wenku.baidu.com/view/e6992701de80d4d8d15a4fc9.html

  • 又拍网架构中的消息 http://wenku.baidu.com/view/c35c99d86f1aff00bed51e57.html

  • 豆瓣网技术架构 http://wenku.baidu.com/view/c569e45c3b3567ec102d8a26.html

    虎扑网的分享

    InfoQ:为什么选择了RabbitMQ作为消息服务器?我们知道RabbitMQ是ERLang语言编写了,在实际使用的过程中是否对RabbitMQ进行了集群,是否需要进行扩展开发?如果需要扩展开发,你们采用了哪种语言?我们知道RabbitMQ支持多种语言..

    洪涛:其实我们对消息队列的需求还是比较高的,一共有5点:一是能够提供多种消息分法的规则以匹配我们不同的业务类型,二是性能要高,三是需要支持多种语言的类库以便做接入,四是提供持久化,五是需要在未来支持集群。而同时满足这几个条件的成熟的消息队列系统其实并不多,RabbitMQ是其中之一。另一个原因是我在之前公司工作时有一位来自乌拉圭的同事对RabbitMQ很有研究,当时经常和他讨论消息队列方面的问题,所以在众多消息队列中,对RabbitMQ比较熟悉,也对它比较认可,使用它作为消息队列自然也就不奇怪了。补充一句,这位同事叫Alvaro Videla,他是市面上唯一一本RabbitMQ方面的书《RabbitMQ in Action》的作者之一,对消息队列很有研究,我的很多经验都来自和他的交流。

    消息队列能够将业务逻辑解耦,调用方只需要下达命令而不用等待整个逻辑执行完毕。除此之外消息队列也可以抑制性能波峰的产生,在瞬时业务增长产生时保持性能曲线的平滑。

How to Install

RabbitMQ的安装非常简单,下载源码包之后编译即可,很多脚本都可以在scripts文件夹里面找到,简单给出一个在centos环境下的安装示例:

 yum install libxslt python zip unzip nc -ywget http://www.rabbitmq.com/releases/rabbitmq-server/v2.8.7/rabbitmq-server-2.8.7.tar.gztar xfvz rabbitmq-server-2.8.7.tar.gz cd  rabbitmq-server-2.8.7make

如果你还没有安装Erlang,那么参考这里:[Erlang 0004] Centos 源代码编译 安装 Erlang 记得使用Erlang最新版本哦,晚安各位!

2013-06-06 更新 有朋友问.net开发者如何比较"优雅"的构造Rabbit消息,除了使用Json/XML这种文本消息结构之外,我们还可以使用二进制序列化

  public static class SerializationHelper{public static byte[] ToByteArray<T>(this T t){using (var memoryStream = new MemoryStream()){BinaryFormatter formatter = new BinaryFormatter();formatter.Serialize(memoryStream, t);return memoryStream.ToArray();}}public static object FromByteArray(byte[] data){using (MemoryStream stream = new MemoryStream()){stream.Write(data, 0, data.Length);stream.Position = 0;BinaryFormatter formatter = new BinaryFormatter();return formatter.Deserialize(stream);}}}[Serializable]public class RequestMessage{public int Id { get; set; }public string Request { get; set; }public override string ToString(){return string.Format("Id: {0} Request: '{1}'", Id, Request);}}[Serializable]public class ReplyMessage{public int Id { get; set; }public string Reply { get; set; }public override string ToString(){return string.Format("Id: {0} Reply: '{1}'", Id, this.Reply);}}

消息中间件RabbitMQ 初探相关推荐

  1. 面试必过之消息中间件RabbitMQ面试总结大全!

    本篇基于海量的学员大厂面试,面试中关于消息中间件RabbitMQ的问题专题整理,希望对即将入行的同学有所帮助,祝一切顺利! 1.使用RabbitMQ有什么好处? 抢购活动,削峰填谷,防止系统崩塌. 延 ...

  2. 分布式系统消息中间件——RabbitMQ的使用基础篇

    分布式系统消息中间件--RabbitMQ的使用基础篇 转载于:https://www.cnblogs.com/zhehan54/p/9679101.html

  3. RabbitMq初探——安装

    rabbitmq Server安装 rabbitmq server安装很简单. 安装erlang环境 rpm -ihv erlang-18.1-1.el6.x86_64.rpm rpm -ihv ra ...

  4. 基于消息中间件RabbitMQ实现简单的RPC服务

    转载自  基于消息中间件RabbitMQ实现简单的RPC服务 RPC(Remote Procedure Call,远程过程调用),是一种计算机通信协议.对于两台机器而言,就是A服务器上的应用程序调用B ...

  5. 分布式日志sleuth+分布式追踪系统zipkin+消息中间件rabbitMQ+MySQL存储跟踪数据

    一.了解分布式架构下系统的监控问题 接口监控问题 监测性能瓶颈 解决方案:Sleuth 日志监控问题 日志分散 解决方案:ELK+Kafka 二.使用Sleuth实现大觅网微服务跟踪 1.打开一个分布 ...

  6. 分布式系统消息中间件-RabbitMQ介绍及其应用

    分布式系统消息中间件-RabbitMQ 一.消息中间件 1.1 中间件 1.1.1 什么是中间件? 中间件(Middleware)是处于操作系统和应用程序之间的软件.人们在使用中间件时,往往是一组中间 ...

  7. RabbitMQ初探--用C#简单实现通信服务

    MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 消息传递指的是程序之 ...

  8. 消息中间件Rabbitmq核心概念讲解

    概述 Rabbitmq是消息中间件的一种落地开源实现,使用Erlang语言编写,基于AMQP消息协议. 核心概念 Message:消息是不具名的,由消息头和消息体组成,消息体是不透明的,也就是可以设置 ...

  9. 【MQ】MQ消息中间件RabbitMQ

    第一部分:RabbitMQ 一.MQ 概念 MQ,Message Queue,消息队列.本质是队列,遵循FIFO先进先出原则.只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于 ...

  10. springboot(十)SpringBoot消息中间件RabbitMQ

    github地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service 1. ...

最新文章

  1. 我来说说14届竞赛内容,别拍勿喷
  2. java个人学习笔记:取模运算 整数除运算 +运算
  3. dbForge Studio 2020 for MySQL中文版
  4. python怎么设置图的大小_python – 如何调整seaborn中的子图大小?
  5. C++总结笔记(一)—— 基础知识汇总
  6. WSO2注册表安装简介
  7. 【kafka】记一次线上kafka一直rebalance故障 消费慢 数据积压
  8. 程序员30多岁了还单身的原因
  9. javaweb中servlet中使用poi
  10. Spring Boot(十八):使用Spring Boot集成FastDFS
  11. 一些爱不释手的 Chrome 插件
  12. 虚拟机无法获取IP地址
  13. 使用FFMPEG3.4.2版本进行视频的解码为YUV格式
  14. 【学员问答】中国人民大学与加拿大女王大学中外合作办学金融硕士项目
  15. Spark 练习之疫情分析
  16. springboot 启动banner 打印 佛祖保佑
  17. c语言rand函数源码路径,C语言中的rand()函数
  18. 血泪史: k8s Initial timeout of 40s passed.
  19. echart 热搜词云(字符云)的制作以及遇到颜色不会随即变得bug
  20. 每日小技巧,用python给喜欢的主播自动发弹幕

热门文章

  1. HIMSS 对EHR的定义
  2. java毕业设计大数据在线考试系统在线阅卷系统及大数据统计分析源码+系统+数据库+lw文档+调试运行
  3. H3C官方培训课件大全
  4. 古诺(Cournot)竞争博弈模型 matlab仿真代码实现
  5. STM32 flash 大小
  6. webService CXF框架
  7. 实验室信息化建设助力医药研发
  8. 单片机入门必备知识,c语言基础来了
  9. 主流智能家居通信总线、无线、电力载波和以太网的基本介绍
  10. 计算机基础——11种排序(sort)算法