最近被公司派去研究新技术,RabbitMQ队列服务,用来替换公司正在使用的Redis队列,至于为什么准备使用RabbitMQ而要弃用redis,这里我就不细说了,网上自己去查查资料吧,萝卜白菜各有所爱。
总之,在一系列的查看资料,查文档,上谷歌求助等等,终于我封装的RabbitMQ框架就要上线生产了(预计11.15日上线,经过三轮测试),我没有使用Spring提供的rabbitmq框架,而是自己对原生的代码进行了封装,这样也可以加深对Rabbitmq的理解。我在研究过程中也是遇到了不少的坑,不过有幸最终也终于是解决了,在这里真的非常感谢Rabbitmq的官方开发者,我在google的Rabbitmq用户论坛上得到了官方开发者很多的帮助,我也帮他们Rabbitmq测试一个小问题,嘿嘿,他们承诺说会在下个版本进行修复!在这里也会把这些问题写下来,希望也能给大家提供一些帮助,让大家在使用的时候不要再走我的弯路。
惯例,这里先提供简单的Rabbitmq的安装流程,只提供linux版本的,windows请自行查找,Rabbitmq使用erlang语言编写,所以在安装Rabbitmq需要先安装erlang,这跟java程序需要安装jdk应该是一个道理的.
一、安装erlang
1.
在/usr/local 目录下 下载erlang.
wget http://erlang.org/download/otp_src_19.0.tar.gz
如果无法下载使用手动下载并上传到该目录下。
2.
解压该包
tar zxvf otp_src_19.0.tar.gz
3.
进入解压出的目录,执行命令./configure
如果在最下方发现APPLICATIONS DISABLED ,说明有缺少的组件,安装对应的组件。
a). 出现 No curses library functions found 错误:需要安装ncurses
yum install ncurses-devel
b). 出现 ODBC library - link check failed 错误 安装 ODBC
yum list|grep unixODBC
yum install unixODBC-devel
c).出现No usable OpenSSL found
请安装openssl
再次执行./configure 没有出现APPLICATIONS DISABLED信息说明组件已就绪。
4.
执行make install 进行安装.
二、安装RabbitMQ
1. 在/usr/local 目录下 下载rabbitmq
wget https://github-cloud.s3.amazonaws.com/releases/924551/fe3568da-5aeb-11e6-97d0-2844b85b23c5.rpm?
X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAISTNZFOVBIJMK3TQ%2F20160825%2Fus-east-1%
2Fs3%2Faws4_request&X-Amz-Date=20160825T100257Z&X-Amz-Expires=300&X-Amz-Signature=
4e10003bcc9d618e7a274546a7f9d7fa7c4e40679cf44bdbe3516d24f245de98&X-Amz-SignedHeaders=host&actor_id=0
&response-content-disposition=attachment%3B%20filename%3Drabbitmq-server-3.6.5-1.noarch.rpm
&response-content-type=application%2Foctet-stream
如果无法下载使用手动下载并上传到该目录下
2. 导入密钥
这个步骤我不确定是否真的需要,
你可以在官方安装介绍:
http://www.rabbitmq.com/install-rpm.html 这里找到这个密钥
3. 安装rabbitmq
rpm -ivh --nodeps rabbitmq-server-3.6.5-1.noarch.rpm
4.
进入/etc/rabbitmq 目录下
5.
创建配置文件rabbitmq-env.conf.或导入配置文件。
配置文件一般用不到,我这里也就两个配置,一个端口配置,一个节点名称配置,实际上没有这个配置文件也没有影响,端口默认是5672,节点名称我们几乎用不到.
注意:如果你要配置集群,在进行接下来步骤之前请先修改本机的hostname,然后配置host 让集群之前可以互相通信,这个后面说。
6.
开启rabbitmq监控程序
进入/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/sbin/目录执行
./rabbitmq-plugins enable rabbitmq_management
7. 启动rabbitmq
./rabbitmq-server –detached
8.
创建帐号
./rabbitmqctl add_user rabbitmq212 123456
rabbitmq212 为帐号 123456 是密码
9. 分配帐号权限
./rabbitmqctl set_user_tags rabbitmq212 administrator
10. 创建虚拟服务路径并分配权限
./rabbitmqctl add_vhost wonhigh_host
./rabbitmqctl set_permissions -p wonhigh_host rabbitmq212 ".*" ".*" ".*"
这个
wonhigh_host可以单纯是这种英文字母,也可以是路径比如 /usr 或者/user/student 等等 具体的东西大家自己上RabbitMQ官方文档上看吧.
到这一步,RabbitMQ就算是安装好了,接下来你只需要 http://[你对应机器的ip]:15672/ , 访问你机器ip加15672端口就可以看到我们RabbitMQ的管理中心了.
比如我的是: http://172.20.32.141:15672/
这就是我们的RabbitMQ控制管理中心.最上面的标签栏还可以看到连接情况、信道情况、交易中心、队列、还有后台管理几个模块.
页面下方会显示当前节点信息,以及配置文件路径,节点路径,日志路径等等,绿色标识一切正常.
接下来会介绍RabbitMQ集群的部署.
二、RabbitMQ集群部署
1. 开启话务组件
./rabbitmq-plugins enable rabbitmq_stomp
2.
配置/etc/hosts 保证通信
也就是上面说的根据hostname配置ip映射.
3.
保证erlang的cookie文件一致
/root/.erlang.cookie
用该命令将主节点的erlang.cookie复制到各个节点
scp /root/.erlang.cookie [email protected]:/root/.erlang.cookie
172.17.194.213 就是子节点的ip了,@前面的root是linux帐号,总之不管你用什么方式,只要让两个解气的这个文件是一样的就行了.
4.
重启子节点的rabbitmq
5.
./rabbitmqctl stop_app
./rabbitmqctl reset
./rabbitmqctl join_cluster rabbitmq@mqtest 作为disk节点加入主节点
如果作为ram节点可如下:./rabbitmqctl join_cluster –ram rabbitmq@mqtest
这里给大家的建议是一般作为disk节点,disk节点就是说会把数据保存到磁盘的意思.
./rabbitmqctl start_app
6.
设置镜像队列
访问web管理控制台添加policies
这个的作用是使集群中的队列按照一定的规则在集群中进行同步
pattern就是同步规则,我的正则表达式是 ^.* 表示任意的.
你也可以设定自己规则
在此访问我们的RabbitMQ的Web管理控制台来看就可以看到
是两个节点了,也就是形成集群了.
到这里RabbitMQ的安装和部署就完成了,下一节我会继续讲一下RabbitMQ的消费者和生产者代码的封装,以及我在使用过程中遇到的问题,和最后是如何解决这些问题的。