前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >02.RabbitMQ简介

02.RabbitMQ简介

作者头像
qubianzhong
发布2019-08-14 14:20:26
1.1K0
发布2019-08-14 14:20:26
举报
文章被收录于专栏:行者常至行者常至

在介绍RabbitMQ之前,我们先了解一下消息队列的简史

RabbitMQ简史

1983年孟买26岁的工程师Vivek Ranadive设想一种软件总线,同年Teknekron诞生了。

1985年用于高盛,用于解决金融交易。于是发布订阅模式(PubSub)诞生了,同时还诞生了世界上第一个现代消息队列软件:Teknekron的The Information Bus(TIB)。

由于在那个时期金融交易行业门庭若市,因此TIB迅速传播开来。它引起了电信特别是新闻机构的注意。这些行业也特别需要将信息及时发布给千变万化的客户。这也解释了为什么在1994年大型新闻机构路透社收购了Teknekron。

与此同时,这个迅猛发展的企业软件也引起了蓝色巨人的注意。毕竟IBM最大的几位客户都来自于金融服务行业。因此,在20世纪80年代后期,IBM开始研究开发自己的消息队列软件,实际开发工作始于1990年,三年后,消息队列服务器软件IBM MQ产品系列面世。17年后,MQ系列进化成了WebSphere MQ并统治着商业消息队列平台市场。

在那段时间,TIB并没有消失在路透社腹中。相反,它仍然是企业通信市场的主要参与者。并且在1997年Teknekron以TIBCO的形式作为一家独立公司再度出现。同年,微软也在消息通信市场崭露头角:微软消息队列MSMQ诞生。

通过这一系列的革新,消息队列(MQ)软件主要留住了大型组织机构,它们需要可靠性、解耦以及实时消息通信。为什么MQ不去寻找更大的市场呢?

因为:供应商壁垒。因为,商业MQ供应商想要解决应用互通的问题,而不是去创建标准接口来允许不同的MQ产品互通。供应商壁垒维持着足够高的价格和利润率,并使得这些商业MQ软件对那些当今繁荣昌盛的初创公司和Web2.0公司来说遥不可及。

结果,中小技术公司并不是唯一一个对高价格MQ供应商感到不满的。那些造就MQ产业的金融服务公司对此也激动不起来。越是大型的金融公司越不可避免地使用来自众多供应商的MQ产品,来服务企业内部的不同应用。如果应用已经订阅了TIBCO MQ消息,若突然需要消费来自IBM MQ的消息,则实现起来会非常困难。这些产品使用不同的API、不同的协议,因而毫无疑问无法联合起来组成单一的总线。为了解决这个问题,Java Message Service(JMS)在2001年诞生了。

JMS试图通过提供公共Java API的方式,隐藏单独MQ产品供应商提供的实际接口,从而跨越了壁垒和解决了互通问题。从技术上讲,Java应用程序只需针对JMS API编程,选择合适的MQ驱动即可。JMS会打理好其他部分。

问题是你在尝试使用单独标准化接口来胶合众多不同的接口。这就像是把不同类型的衣服黏在一起:缝合处终究会裂开,真想会暴露出来。使用JMS的应用程序会变得更加脆弱。我们需要新的消息通信标准化方案。

2004年,救世主AMQP诞生了。AMQP从一开始就设计为开放标准,以解决众多的消息队列需求和拓扑结构问题。凭借开发,任何人都可以执行这一标准,针对标准编码的任何人都可以和任意AMQP供应商提供的MQ服务器进行交互。

在2006年,Rabbit Technologies诞生了:其拥有着RabbitMQ的知识产权。之所以叫Rabbit这个名字,是因为他们觉得,兔子是行动非常迅速的动物,而且繁殖起来也非常疯狂,把它用于分布式软件的命名再合适不过了。

时机总是如此的恰到好处,就在此时,AMQP规范的第一份公开草案也公之于世了。作为一份新的规范,AMQP正快速修订。这正是Erlang可以施展拳脚的地方。通过Erlang,RabbitMQ可以快速开发并跟上AMQP标准前进的节奏。核心开发人员Tony Garnock-Jones仅仅用了两个半月就将RabbitMQ 1.0版本开发完成了。2007年RabbitMQ 1.0版本正式面世。

此处简短介绍下ErLang,Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,因此非常适合于构建分布式,实时软并行计算系统。使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。

Erlang并非一门新语言,它出现于1987年,只是当时对并发、分布式需求还没有今天这么普遍,当时可谓英雄无用武之地。Erlang语言创始人Joe Armstrong当年在爱立信做电话网络方面的开发,他使用Smalltalk,可惜那个时候Smalltalk太慢,不能满足电话网络的高性能要求。但Joe实在喜欢Smalltalk,于是定购了一台Tektronix Smalltalk机器。但机器要两个月时间才到,Joe在等待中百无聊赖,就开始使用Prolog,结果等Tektronix到来的时候,他已经对Prolog更感兴趣,Joe当然不满足于精通Prolog,经过一段时间的试验,Joe给Prolog加上了并发处理和错误恢复,于是Erlang就诞生了。这也是为什么Erlang的语法和Prolog有不少相似之处。

我们再回头来看RabbitMQ。就这样一直到今天,RabbitMQ广泛使用在小到初创公司,大到互联网巨头。其中,令创始人感到惊讶的是:Rabbit的客户主要是技术公司而并非金融公司。同时,RabbitMQ也吸引着那些只有少量预算同时也要解决消息通信的个人或团队。

我们在了解了简史之后,接下来我们再来看下,如何搭建RabbitMQ环境

搭建RabbitMQ环境

下载地址:https://www.rabbitmq.com/download.html

Windows下安装

1.安装Erlang: 下载地址:https://www.erlang.org/downloads

安装:

安装完成。

2.安装RabbitMQ:

安装完成。

3.启动管理工具

  • 打开RabbitMQ Server的安装目录下的 rabbitmq_server-3.7.16\sbin
  • 在此目录下,打开cmd,并输入命令,启用Web管理界面
代码语言:javascript
复制
rabbitmq-plugins enable rabbitmq_management 
代码语言:javascript
复制
  此处提示Erlang没有添加环境变量,添加Erlang环境变量后重试。
  • 启动RabbitMQ Server
  • 访问 http://127.0.0.1:15672
Linux(Ubuntu)下安装

1.安装Erlang

代码语言:javascript
复制
sudo apt-get install erlang

2.安装RabbitMQ

代码语言:javascript
复制
sudo apt install rabbitmq-server

3.启动、停止

代码语言:javascript
复制
sudo service rabbitmq-server start
sudo service rabbitmq-server stop
sudo service rabbitmq-server restart

4.开启Web界面管理工具

代码语言:javascript
复制
rabbitmq-plugins enable rabbitmq_management
service rabbitmq-server restart

5.解决guest用户不允许访问

代码语言:javascript
复制
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.7/ebin
sudo vim rabbit.app

# 将 {loopback_users, [<<”guest”>>]}
# 修改为 {loopback_users, []}
# 原因:rabbitmq从3.3.0开始,使用guest/guest权限只能通过localhost访问

6.重启服务,就可以访问Web界面啦

代码语言:javascript
复制
sudo systemctl restart rabbitmq-server.service

Web管理界面咱们会在理解了RabbitMQ消息通信中的基本概念后,再详细介绍。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年08月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RabbitMQ简史
  • 搭建RabbitMQ环境
    • Windows下安装
      • Linux(Ubuntu)下安装
      相关产品与服务
      消息队列 CMQ 版
      消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档