golang连接rabbitmq并推送消息给web

预设环境

centos7.3+rabbitmq3.7.24+Erlang 22.2.6

下载地址与配置步骤

参考http://www.luyixian.cn/news_show_12479.aspx

配置过程中可能遇到的问题

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]

解决办法:

  • 修改rabbitmq配置文件,增加NODENAME=rabbit@localhost,并重新启动rabbitmq
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端构建

参考https://blog.csdn.net/astiantian/article/details/84025541

附rabbitMQ官方文档:https://www.rabbitmq.com/documentation.html

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Go中实现RabbitMQ连接池,你可以使用`github.com/streadway/amqp`库结合`sync.Pool`来管理连接对象。这是一个简单的连接池实现示例: ```go import ( "github.com/streadway/amqp" "sync" ) type RabbitMQPool struct { connStr string pool *sync.Pool } func NewRabbitMQPool(connStr string) *RabbitMQPool { return &RabbitMQPool{ connStr: connStr, pool: &sync.Pool{ New: func() interface{} { conn, err := amqp.Dial(connStr) if err != nil { panic(err) // 处理连接错误,这里简单起见直接panic } return conn }, }, } } func (p *RabbitMQPool) GetConnection() *amqp.Connection { return p.pool.Get().(*amqp.Connection) } func (p *RabbitMQPool) ReleaseConnection(conn *amqp.Connection) { p.pool.Put(conn) } ``` 在上面的示例中,`RabbitMQPool`结构体代表了一个RabbitMQ连接池。`NewRabbitMQPool`函数用于创建一个新的连接池对象,传入RabbitMQ连接字符串作为参数。 `GetConnection`方法用于从连接池中获取一个可用的连接对象。`ReleaseConnection`方法用于将连接对象放回连接池中。 这样,你就可以在你的代码中使用连接池来获取和释放RabbitMQ连接,而无需每次都重新创建和关闭连接。例如: ```go pool := NewRabbitMQPool("amqp://guest:guest@localhost:5672/") // 获取连接 conn := pool.GetConnection() defer pool.ReleaseConnection(conn) // 使用连接进行操作,比如发送消息等 // ... ``` 记得在适当的地方处理连接错误和关闭连接。 请注意,这只是一个简单的示例,你可以根据你的实际需求进行适当的修改和扩展,比如添加连接的最大数量、定时检查连接状态等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值