预设环境

centos7.3+rabbitmq3.7.24+Erlang 22.2.6

下载地址与配置步骤 配置过程中可能遇到的问题

UI界面无法打开

  1. 启用RabbitMQ的Web管理插件
rabbitmq-plugins enable rabbitmq_management
  1. 检查防火墙是否打开“15672”,“5672”,“15674”端口
    15672:UI端使用端口
    5672:golang连接rabbitmq使用的接口
    15674:web端连接rabbitmq使用的接口
firewall-cmd --list-ports
  1. 若没有打开,则使用以下命令添加永久端口
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
  1. 重启防火墙
firewall-cmd --reload

UI界面无法在其他机器上打开

  1. 检查防火墙有无开放15672端口

  2. 在安装rabbitmq的服务器上打开“localhost:15672”使用“guest”,“guest”进入rabbitmq的管理界面,创建一个用户,并赋“administrator”权限
    在这里插入图片描述

  3. 使用新建用户在另一台机器上打开“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端的构建

  1. 下载 rabbitmq golang 客户端
go get github.com/streadway/amqp
  1. 连接rabbitmq
url := "amqp://" + usr + ":" + pwd + "@" + addr
conn, err := amqp.Dial(url)

其中usr为用户名,pwd为密码,addr为rabbitmq所在ip地址:5672

  1. 创建通道
ch, err := conn.Channel()
  1. 声明交换器
err := ch.ExchangeDeclare(r.exchangeName, amqp.ExchangeTopic, true, false, false, true, nil)
		if err != nil {
			log.ERROR("Exchange Create Error")
			return err
		}
  1. 声明队列
if _, err := ch.QueueDeclare(r.queueName, true, false, false, true, nil); err != nil {
	log.ERROR("queue Create Error")
	return err
}
  1. 队列与交换器绑定
if err = ch.QueueBind(r.queueName, r.routingKey, r.exchangeName, true, nil); err != nil {
	log.ERROR("queue bind Error")
	return err
}
  1. 与web端交换器绑定
if err := ch.ExchangeBind("amq.topic", r.routingKey, r.exchangeName, false, nil); err != nil {
			return err
		}
  1. 推送消息
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端构建