rabbitMQ 消息中间件的了解

昨天一个开发朋友说很着急安装消息中间件rabbitMQ,但是安装过程有点恶心,但说是要培训什么的。让我帮忙看一下!那我总结一下这个消息中间件吧。

1.消息队列的相关概念:

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

消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。

排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等。

2.rabbitmq的简单介绍:

rabbitmq是采用Erlang(一种通用的面向并发的编程语言)编写的符合AMQP(Advanced Message Queuing Protocol-高级消息队列协议)规范的消息中间件。诞生于金融行业,现在广泛应用于企业级的分布式应用中。

3.rabbitMQ的结构图:

rabbitMQ的结构图

详细解释:

从模型抽象上来说其工作过程:生产者(clientA/B)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者(client1/2/3)。

producer(publisher):消息的生产者,也是一个向交换器发布消息的客户端应用程序。

Exchange:交换器,实现对消息的路由,生产者投递消息后最先到达exchange,由exchange决定将消息投递到那个queue,消息正确投递之前需要将exchange和queue进行绑定。

Queue:消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

Rabbit Server:虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP(Advanced Message Queuing Protocol-高级消息队列协议) 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。

consumer:消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。

4.exchange模式:

Exchange分发消息时根据类型的不同分发策略有区别,目前共四种类型:direct、fanout、topic、headers 。headers 匹配 AMQP(Advanced Message Queuing Protocol-高级消息队列协议)  消息的 header 而不是路由键,此外 headers 交换器和 direct 交换器完全一致,但性能差很多,目前几乎用不到了,所以直接看另外三种类型:

1)direct

消息中的路由键(routing key)如果和 Binding 中的 binding key 一致, 交换器就将消息发到对应的队列中。路由键与队列名完全匹配,如果一个队列绑定到交换机要求路由键为“dog”,则只转发 routing key 标记为“dog”的消息,不会转发“dog.puppy”,也不会转发“dog.guard”等等。它是完全匹配单播的模式。

direct模式

2)fanout-广播模式

每个发到 fanout 类型交换器的消息都会分到所有绑定的队列上去。fanout 交换器不处理路由键,只是简单的将队列绑定到交换器上,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。fanout 类型转发消息是最快的。

3)topic

topic 交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。它同样也会识别两个通配符:符号“#”和符号“*”。*匹配0个或多个单词,#匹配不多不少一个单词

topic模式

4)header

按照消息头投递到队列,不考虑routing key。

5.rabbitMQ的安装:

相关的环境: centos 6.5

默认端口:

client端通信口5672

管理口15672

server间内部通信口25672

erlang发现口:4369

1)安装erlang-7.3

从源码编译安装Erlang,有三个库或工具是必须的:

一是完整的GCC编译器环境

二是Ncurses开发库

三是ODBC开发库

下载:

wget http://www.erlang.org/download/otp_src_18.3.tar.gz

tar zvxf otp_src_18.3.tar.gz

cd otp_src_18.3/

./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smmp-support --enable-kernel-poll --enable-hipe --without-javac

--enable-smmp-support启用对称多处理支持

--enable-threads启用异步线程支持

--enable-sctp启用流控制协议支持

--with-ssl  openssl的扩展库

--enable-kernel-poll启用Linux内核poll

--enable-hipe启用高性能Erlang

(java编译器编译,可以去掉了--without-javac)

遇到的报错:

遇到的问题

解决方法:

yum install unixODBC-devel  -y

再次执行

./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smmp-support --enable-kernel-poll --enable-hipe --without-javac

make

make install

添加环境变量:

echo 'export PATH=$PATH:/usr/local/erlang/bin'  >> /etc/profile

source /etc/profile

查看安装结果:

erlang安装结果

2)安装rabbitmq-3.6.12

下载和安装:

wget  http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.12/rabbitmq-server-generic-unix-3.6.12.tar.xz

yum install xz -y

tar xf  rabbitmq-server-generic-unix-3.6.12.tar.xz

mv  rabbitmq_server-3.6.12  /usr/local/rabbitmq_server

启动命令

进入sbin目录

cd rabbitmq_server-3.6.12/sbin

开启节点

./rabbitmqctl start_app

启用web管理界面

./rabbitmq-plugins enable rabbitmq_management

#启动命令,该命令ctrl+c后会关闭服务

./rabbitmq-server

#在后台启动Rabbit

./rabbitmq-server -detached

#关闭服务

./rabbitmqctl stop

用户相关的命令

#添加用户

#rabbitmqctl add_user Username Password

./rabbitmqctl add_user rabbitadmin 123456

#分配用户标签

#rabbitmqctl set_user_tags User Tag#[administrator]:管理员标签

./rabbitmqctl set_user_tags rabbitadmin administrator

#列出用户

./rabbitmqctl list_users

#删除用户

rabbitmqctl delete_user 用户名

#修改密码

rabbitmqctl  change_password  用户名 密码

Vhost 相关的命令:

#添加vhost

./rabbitmqctl add_vhost  vhost_name

#删除vhost

./rabbitmqctl delete_vhost vhost_name

#查看vhost

./rabbitmqctl list_vhosts

#设置权限

./rabbitmqctl set_permissions -p vhost username ".*" ".*" ".*"  ##权限位对应为 config read write

读:有关消费消息的任何操作,包括清除整个队列(需要绑定操作成功)

写:发布消息(需要绑定操作成功)

配置:队列和交换器的创建和删除

#查看权限

./rabbitmqctl list_permissions -p vhost

#删除权限

rabbitmqctl delete_permission -p vhost username

web界面登录效果图:

访问地址:http://ip:15672

web页面效果图

报错信息汇总:

启动报错

解决方法:

abbitmqctl start_app

rabbitmq-plugins enable rabbitmq_management

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容

  • RabbitMQ采用Erlang编写,需安装语言库才能运行RabbitMQ代理服务器。AMQP:高级消息队列协议。...
    JAVA觅音阁阅读 3,616评论 0 7
  • 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时...
    预流阅读 584,607评论 51 786
  • 摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理一般来说,...
    癫狂侠阅读 74,172评论 11 97
  • RabbitMQ 原理介绍及安装部署 标签:RabbitMQ 安装 简介 RabbitMQ 是一个用 Erlang...
    神仙CGod阅读 8,564评论 0 60
  • 在夜色中,与父亲倾心交谈,才知道,我原来一直不曾刻意去了解的那个男人,不曾熟悉,却猛然发现那么温柔,那么坚韧的是...
    别遇阅读 195评论 1 1