rabbitmq.go 1.12 KB
package mq

import (
	"fmt"

	"github.com/streadway/amqp"
)

var mqUrl = "amqp://admin:Dbc_rabbit_mq123@39.97.234.228:5682/"

// 除了simple 模式外、其他的模式都是由 队列 交换机 key 不同组合实现的
type RabbitMQ struct {
	conn      *amqp.Connection
	channel   *amqp.Channel
	QueueName string //队列
	Exchange  string //交换机
	Key       string //key
	MQUrl     string //连接信息
}

// 创建RabbitMQ 实例
func newRabbitMQ(queueName, exchange, key string) (*RabbitMQ, error) {
	rabbitMQ := &RabbitMQ{
		QueueName: queueName,
		Exchange:  exchange,
		Key:       key,
		MQUrl:     mqUrl,
	}

	var err error
	// dial mq
	rabbitMQ.conn, err = amqp.Dial(rabbitMQ.MQUrl)
	if err != nil {
		return nil, err
	}

	rabbitMQ.channel, err = rabbitMQ.conn.Channel()
	if err != nil {
		return nil, err
	}
	_, err = rabbitMQ.channel.QueueDeclare(
		rabbitMQ.QueueName,
		true,
		false,
		false,
		false,
		nil,
	)
	if err != nil {
		return nil, err
	}

	return rabbitMQ, nil
}

// 错误处理
func (r *RabbitMQ) failOnErr(err error, message string) {
	if err != nil {
		panic(fmt.Sprintf("%s:%s", err.Error(), message))
	}
}