简介
官网 https://www.rabbitmq.com/
RabbitMQ 是用erlang语言开发的消息组件,erlang属于爱立信,是为通讯设计的语言
RabbitMQ在2010年被SpringSource收购
RabbitMQ在2013年被并入Pivotal公司
消息组件分两种
一种是JMS,代表作ActiveMQ
一种是AMQP,代表作
KafKa(大数据时代的产物),
RabbitMQ(老一辈消息组件,应用最为广泛)
性能分析
JMS(慢)的消息组件工作在应用层,要对数据进行解析后才能应用,不支持跨平台
AMQP(快) 的消息组件工作在传输层,不用对数据进行解析,所以支持跨平台
所以AMQP的性能是要高于JMS的
安装erlang开发环境
首先要先安装GCC GCC-C++ Openssl等模块
yum install gcc-c++
yum -y install ncurses-devel
下载erlang source 包
http://erlang.org/download/otp_src_19.0.tar.gz
解压包
tar -zxvf otp_src_19.0.tar.gz
进入包里,执行(/opt/modules/erlang是我安装目录)
./configure --prefix=/usr/local/erlang
看到如下界面,表示成功
*********************************************************************
********************** APPLICATIONS DISABLED **********************
*********************************************************************
jinterface : No Java compiler found
odbc : ODBC library - link check failed
*********************************************************************
*********************************************************************
********************** APPLICATIONS INFORMATION *******************
*********************************************************************
wx : wxWidgets not found, wx will NOT be usable
*********************************************************************
*********************************************************************
********************** DOCUMENTATION INFORMATION ******************
*********************************************************************
documentation :
fop is missing.
Using fakefop to generate placeholder PDF files.
*********************************************************************
编绎
执行 make(这一步是真的慢)
安装
执行make install
添加环境变量
把我安装路径/usr/local/erlang/bin路径添加到etc 下面的 profile 文件
vim /etc/profile
export ERLANG_HOME=/usr/local/erlang
export PATH=$PATH:$ERLANG_HOME/bin:
让配置生效
source /etc/profile
测试erlang是否安装成功
输入erl进入erlang控制台,输入io:format("hello world"). 打印hello world,输入halt().退出erl控制台
[root@localhost ~]# erl
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V8.2 (abort with ^G)
1> io:format("hello world").
hello worldok
2> halt().
[root@localhost ~]#
RabbitMQ的官方文件不是tar.gz文件,而是xz文件,要对其进行解压缩
[root@localhost erlang]# xz -d /tmp/rabbitmq-server-generic-unix-3.6.6.tar.xz
此时会得到一个tar文件,在对tar文件进行解压缩,不能带z而用-xvf
[root@localhost tmp]# tar -xvf /tmp/rabbitmq-server-generic-unix-3.6.6.tar -C /usr/local/
启动RabbigMQ
[root@localhost sbin]# rabbitmq-server start
后台方式运行
#service rabbitmq-server start
见到如下界面,表示启动成功
RabbitMQ 3.6.6. Copyright (C) 2007-2016 Pivotal Software, Inc.
## ## Licensed under the MPL. See http://www.rabbitmq.com/
## ##
########## Logs: /usr/local/rabbitmq/var/log/rabbitmq/rabbit@localhost.log
###### ## /usr/local/rabbitmq/var/log/rabbitmq/rabbit@localhost-sasl.log
##########
Starting broker...
completed with 0 plugins.
查看rabbitmq的命令
[root@localhost sbin]# rabbitmqctl --help
增加用户名(yns),密码(123456),此时这个用户还不是管理员
[root@localhost sbin]# rabbitmqctl add_user yns 123456
把用户放入管理员组(administrator)
[root@localhost sbin]# rabbitmqctl set_user_tags yns administrator
查看用户
[root@s1376 sbin]# rabbitmqctl list_users
Listing users ...
guest [administrator]
yns [administrator]
启动rabbitmq的web服务,就可以通过浏览器访问(http://192.168.88.141:15672),并进行配置 15672
[root@localhost sbin]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@localhost... started 6 plugins.
设置用户生成虚拟主机权限
http://192.168.88.141:15672 --> admin --> Name下的 yns --> set Permission(生成用户权限)
查看设置是否成功
http://192.168.88.141:15672 --> admin --> Users
Name Tags Can access virtual hosts Has password
guest administrator / ●
yns administrator / ●
/*************** 以下是rabbitMQ的使用 **************/
创建消息队列:队列可以手工在web创建,也可以通过程序自动创建,以下演示手工创建
http://192.168.88.141:15672 --> queues --> add new queue
Name:(队列的名字)
Durability:(消息是否持久)
durable(持久,如果RabbitMQ重启,未被消费的消息仍然存在)
Transient(知暂的,如果RabbitMQ重启,未被消费的消息就被清空)
Auto delete:(是否自动删除yes)
Add queue:(创建队列)
为了区分各各队列的作用空间,RabbitMQ设置了“虚拟主机”,“交换空间”
虚拟主机,可以区分不同用户的操作空间
创建虚拟主机,此时的虚拟主机不属于任何用户
http://192.168.88.141:15672 --> admin --> Virtual Hosts --> 输入虚拟主机的名字hello --> Add a new virtual host
为虚拟主机设置用户
hello --> 选择用户 --> Set permission
交换空间Exchange --> 绑定队列Queue --> 消费者
广播模式:fanout 一条消息会被所有的消费者处理
直连模式:direct 交换空间与队列通过routingkey辨别彼此的消费关系,只有routingkey相同,才能消费
主题模式:topic 与直连模式类似,只不过通过不同的routingkey把消息发给不同的消费者
/**************** 以下是RabbitMQ与Spring的整合 ****************/