centos7.3+rabbitmq3.7.24+Erlang 22.2.6
下载地址与配置步骤 配置过程中可能遇到的问题UI界面无法打开
- 启用RabbitMQ的Web管理插件
rabbitmq-plugins enable rabbitmq_management
- 检查防火墙是否打开“15672”,“5672”,“15674”端口
15672:UI端使用端口
5672:golang连接rabbitmq使用的接口
15674:web端连接rabbitmq使用的接口
firewall-cmd --list-ports
- 若没有打开,则使用以下命令添加永久端口
firewall-cmd --zone=public --add-port=15674/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=5672/tcp --permanent
- 重启防火墙
firewall-cmd --reload
UI界面无法在其他机器上打开
-
检查防火墙有无开放15672端口
-
在安装rabbitmq的服务器上打开“localhost:15672”使用“guest”,“guest”进入rabbitmq的管理界面,创建一个用户,并赋“administrator”权限
-
使用新建用户在另一台机器上打开“ip:15672”,输入新建的用户名及密码即可打开rabbitmq管理界面
rabbitmq启动失败
启动rabbitmq时,报如下错误
Starting rabbitmq-server (via systemctl): Job for rabbitmq-server.service failed because the control process exited with error code. See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.
[FAILED]
解决办法:
vi /etc/rabbitmq/rabbitmq-env.conf
- 若依然无法启动,则修改系统配置,使SELINUX=disabled,重启操作系统后再重新启动rabbitmq
vi /etc/selinux/config
至此完成了rabbitmq的配置,接下来进行golang端的构建
- 下载 rabbitmq golang 客户端
go get github.com/streadway/amqp
- 连接rabbitmq
url := "amqp://" + usr + ":" + pwd + "@" + addr
conn, err := amqp.Dial(url)
其中usr为用户名,pwd为密码,addr为rabbitmq所在ip地址:5672
- 创建通道
ch, err := conn.Channel()
- 声明交换器
err := ch.ExchangeDeclare(r.exchangeName, amqp.ExchangeTopic, true, false, false, true, nil)
if err != nil {
log.ERROR("Exchange Create Error")
return err
}
- 声明队列
if _, err := ch.QueueDeclare(r.queueName, true, false, false, true, nil); err != nil {
log.ERROR("queue Create Error")
return err
}
- 队列与交换器绑定
if err = ch.QueueBind(r.queueName, r.routingKey, r.exchangeName, true, nil); err != nil {
log.ERROR("queue bind Error")
return err
}
- 与web端交换器绑定
if err := ch.ExchangeBind("amq.topic", r.routingKey, r.exchangeName, false, nil); err != nil {
return err
}
- 推送消息
err = ch.Publish(
r.exchangeName, //exchangeName
r.routingKey,
false,
false,
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(msg),
},
)
if err != nil {
fmt.Println("publish消息失败")
return err
}
web端构建