我们在项目开发的时候都不可避免的会有异步化的问题,比较好的解决方案就是使用消息队列,可供选择的队列产品也有很多,比如轻量级的redis,当然还有重量级的专业产品rabbitmq,rabbitmq好就好在是用erlang(二郎神)开发的,它那天生的OTP并行计算框架,轻而易举的进程间通讯,我都恨不得将后端的内存计算框架全部换成erlang。。。开个玩笑,这篇我们具体来讲讲erlang开发的一个成品,叫做rabbitmq。
一. 安装Erlang
刚才也说了,rabbitmq只不过是erlang开发的一个成品而已,所以我们首先一定要安装好erlang环境才可以
1、安装:yum install erlang
2、检查erl
输入命令:erl
二、安装RabbitMQ:
1、下载安装包:
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm
2、安装:
rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm
3、启用web管理插件
rabbitmq-plugins enable rabbitmq_management
4、启动RabbitMQ
chkconfig rabbitmq-server on
rabbitmq-server start
5、查看状态
rabbitmqctl status
6、增加用户
rabbitmqctl add_user xyt xyt
rabbitmqctl set_user_tags xyt administrator
7、查看用户列表
rabbitmqctl list_users
三、防火墙配置
编辑:vi /etc/sysconfig/iptables
添加:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5672 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 15672 -j ACCEPT
重启防火墙:service iptables start
四、验证RabbitMQ
键入127.0.0.1:15672 就可以看到管理界面啦。
RabbitMq权限问题
异常:
Exception in thread "main" java.io.IOExceptionat com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106)
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:102)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:124)
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:378)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:678)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:722)
at upsmart.zhsen.ServerProducer.main(ServerProducer.java:33)
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; protocol method: #method<connection.close>(reply-code=530, reply-text=NOT_ALLOWED - access to vhost '/' refused for user 'mq', class-id=10, method-id=40)
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67)
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33)
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:361)
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:226)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:118)
... 4 more
原因:
用户‘mq’没有权限访问‘/’
sudo rabbitmqctl list_users
列出用户权限
Listing users ...
mq [administrator]
guest [administrator]
sudo rabbitmqctl set_permissions -p / mq '.*' '.*' '.*'
该命令使用户mq具有‘/’这个virtual host中所有资源的配置、写、读权限以便管理其中的资源